基于控制器的AutoFac注入
本文关键字:AutoFac 注入 控制器 | 更新日期: 2023-09-27 18:25:15
嗨,我想知道我的逻辑是否有缺陷,或者我只是找不到我拥有的ApiControllers(地址/文章/…)的功能,每个都有一个IRepository
如果基类是AddressController,我想注入AddressRepository。ArticleRepository如果ArticleController等等。我可以用Ninject做这件事,但由于公司的标准原因和业绩,我想换。。如何使用AutoFac完成此操作?或者我有反模式?
您应该问问自己,如果在AddressController
中注入ActicleRepository
会发生什么。如果它在运行时编译但损坏,则说明您的设计有问题。确切地说,问题是你违反了Liskov替代原则,该原则规定每个子类型(或接口的实现)的行为都应该与合同兼容。在另一种方式中,每个实现应该是可以相互替代的,而不会引起消费者的注意。
因此,每个存储库都应该有自己的抽象。这里有两条路可走:
- 为每个存储库提供其唯一的非通用抽象,例如
IArticleRepository
和`IAddressRepository - 定义一个通用的
IRepository<TEntity>
抽象。通过这种方式,控制器可以依赖于IRepository<Article>
或IRepository<Address>
,并且您有编译时支持,并且您遵守LSP