首页 > 解决方案 > 无法解析基类服务

问题描述

尝试激活时,Controller由于服务未正确注入,我收到以下错误:

System.InvalidOperationException:“尝试激活“AnubisServer.DroneController”时,无法解析“AnubisServer.Server.IDroneOperations”类型的服务。

我有以下层次结构:

public interface IOperations { }
public interface ICatalog : IOperations { }
public interface IAdmin : ICatalog { }
public interface ICatalogService : IAdmin, ISomethingElse { }

在我的启动中,我为最衍生的接口提供了一个具体的实现 ICatalogService

启动

public void ConfigureServices(IServiceCollection services) {
    services.AddMvc();
    ICatalogService catalogService = new SomeConcreteService();
    services.AddSingleton(catalogService);
}

控制器

public class CatalogController:Controller
{
    private IOperations operations;
    public CatalogController(IOperations ops)
    {
        this.operations=ops;
    }
}

所以我不明白为什么注入基类接口不起作用,因为我提供了一个派生的具体实例。

有任何想法吗?

标签: c#asp.net-coredependency-injection

解决方案


其中的注册IServiceCollection是键值对,其中服务(或抽象)是,组件(或实现)是值。将根据该确切键进行查找。所以在你的情况下,你注册了ICatalogService,而不是 IOperations。这意味着IOperations无法解决。您必须IOperations明确注册。例如:

services.AddSingleton<IOperations>(catalogService);

推荐阅读