基于控制器的AutoFac注入

时间:2014-10-02 08:33:57

标签: c# asp.net-web-api dependency-injection autofac

嗨,我想知道我的逻辑是否有缺陷,或者我是否只能找到我有ApiControllers(地址/文章/ ...)的功能,每个人都有一个IRepository

如果baseclass是AddressController,我想注入AddressRepository。 ArticleRepository如果是ArticleController等。我可以用Ninject做到这一点,但我想切换,因为公司的标准原因和性能..我怎么能用AutoFac做到这一点?或者我有反模式?

1 个答案:

答案 0 :(得分:1)

您应该问问自己,如果在ActicleRepository中注入AddressController会发生什么。如果这会在运行时编译但会破坏,那么您的设计就会出现问题。确切地说,问题是你违反了Liskov substitution principle,它指出每个子类型(或接口的实现)应该以与合同兼容的方式运行。换句话说,每个实现应该可以互相替代,而消费者不需要注意。

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

  1. 为每个存储库提供自己唯一的非通用抽象,例如IArticleRepository和`IAddressRepository。
  2. 定义通用IRepository<TEntity>抽象。这样控制器可以依赖于IRepository<Article>IRepository<Address>,并且您具有编译时支持,并且您正在遵守LSP。