C# 基于控制器的AutoFac注入

C# 基于控制器的AutoFac注入,c#,asp.net-web-api,dependency-injection,autofac,C#,Asp.net Web Api,Dependency Injection,Autofac,您好,我想知道我的逻辑是否有缺陷,或者我只是找不到我的apicontroller(Address/Article/…)的函数。每个apicontroller都有一个IRepository 如果基类是AddressController,我想注入AddressRepository。ArticleRepository(如果是ArticleController)等。我可以用Ninject做到这一点,但由于公司的标准化原因和业绩,我想换一个。。如何使用AutoFac执行此操作?还是我有反模式 您应该问问自

您好,我想知道我的逻辑是否有缺陷,或者我只是找不到我的apicontroller(Address/Article/…)的函数。每个apicontroller都有一个IRepository


如果基类是AddressController,我想注入AddressRepository。ArticleRepository(如果是ArticleController)等。我可以用Ninject做到这一点,但由于公司的标准化原因和业绩,我想换一个。。如何使用AutoFac执行此操作?还是我有反模式

您应该问问自己,如果在
AddressController
中插入
ActicleRepository
,会发生什么。如果编译后在运行时中断,则说明您的设计有问题。确切地说,问题在于您违反了该协议,该协议规定每个子类型(或接口的实现)的行为方式应与该协议兼容。在另一种方式中,每个实现都应该可以相互替换,而无需使用者注意

因此,每个存储库都应该有自己的抽象。这里有两条路可走:

  • 为每个存储库提供自己独特的非通用抽象,例如
    IArticleRepository
    和'iadressrepository'
  • 定义一个泛型的
    IRepository
    抽象。这样,控制器可以依赖于
    IRepository
    IRepository
    ,并且您拥有编译时支持,并且遵守LSP