【问题标题】:AutoFac inject based on controller基于控制器的 AutoFac 注入
【发布时间】:2014-10-02 08:33:56
【问题描述】:

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

如果基类是 AddressController,我想注入 AddressRepository。 ArticleRepository 如果是 ArticleController 等等。我可以用 Ninject 做到这一点,但由于公司标准的原因和性能,我想切换。我如何用 AutoFac 做到这一点?还是我有反模式?

【问题讨论】:

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


    【解决方案1】:

    您应该问问自己,如果在 AddressController 中注入 ActicleRepository 会发生什么。如果它编译但在运行时中断,则说明您的设计有问题。确切地说,问题在于您违反了Liskov substitution principle,该Liskov substitution principle 声明每个子类型(或接口的实现)应该以与合同兼容的方式运行。换句话说,每个实现都应该可以相互替换,而不会引起消费者的注意。

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多