嗨,我想知道我的逻辑是否有缺陷,或者我是否只能找到我有ApiControllers(地址/文章/ ...)的功能,每个人都有一个IRepository
如果baseclass是AddressController,我想注入AddressRepository。 ArticleRepository如果是ArticleController等。我可以用Ninject做到这一点,但我想切换,因为公司的标准原因和性能..我怎么能用AutoFac做到这一点?或者我有反模式?
答案 0 :(得分:1)
您应该问问自己,如果在ActicleRepository
中注入AddressController
会发生什么。如果这会在运行时编译但会破坏,那么您的设计就会出现问题。确切地说,问题是你违反了Liskov substitution principle,它指出每个子类型(或接口的实现)应该以与合同兼容的方式运行。换句话说,每个实现应该可以互相替代,而消费者不需要注意。
因此每个存储库都应该有自己的抽象。这里有两条路可走:
IArticleRepository
和`IAddressRepository。IRepository<TEntity>
抽象。这样控制器可以依赖于IRepository<Article>
或IRepository<Address>
,并且您具有编译时支持,并且您正在遵守LSP。