基于控制器的AutoFac注入

本文关键字:AutoFac 注入 控制器 | 更新日期: 2023-09-27 18:25:15

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

如果基类是AddressController,我想注入AddressRepository。ArticleRepository如果ArticleController等等。我可以用Ninject做这件事,但由于公司的标准原因和业绩,我想换。。如何使用AutoFac完成此操作?或者我有反模式?

基于控制器的AutoFac注入

您应该问问自己,如果在AddressController中注入ActicleRepository会发生什么。如果它在运行时编译但损坏,则说明您的设计有问题。确切地说,问题是你违反了Liskov替代原则,该原则规定每个子类型(或接口的实现)的行为都应该与合同兼容。在另一种方式中,每个实现应该是可以相互替代的,而不会引起消费者的注意。

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

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