c# - 无法解析基类服务
问题描述
尝试激活时,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;
}
}
所以我不明白为什么注入基类接口不起作用,因为我提供了一个派生的具体实例。
有任何想法吗?
解决方案
其中的注册IServiceCollection
是键值对,其中服务(或抽象)是键,组件(或实现)是值。将根据该确切键进行查找。所以在你的情况下,你只注册了ICatalogService
,而不是 IOperations
。这意味着IOperations
无法解决。您必须IOperations
明确注册。例如:
services.AddSingleton<IOperations>(catalogService);
推荐阅读
- javascript - 使用来自 javascript、Chrome 扩展程序的参数调用 Python 函数
- python-3.x - 具有衰减因子的 Cummax 函数,不使用 for 循环
- reactjs - Material UI:并排设置元素的最佳方式
- mysql - 从同一个表中选择计数的 UPDATE 语句以查找第一次出现
- sql - Postgres - 按用户分组行,每个组中每个用户返回一行
- sqlalchemy - sqlalchemy.exc.NoInspectionAvailable:没有检查系统可用于对象类型
- javascript - MongoDB Realm Functions:如何查询集合的文档数
- android - Cordova 文件插件在 Android 5.1 上无法正常工作
- mysql - 根据其他表列值mysql自动生成值的列
- date - 如何在谷歌表格中垂直列出一个月中的所有日子