2014-10-02 66 views
0

您好我想知道如果我的逻辑是有缺陷的,或者如果我只是找不到我ApiControllers(地址/条/ ...)每个人都有一个IRepositoryAutoFac注入一个基于控制器

我想要的功能如果基类是AddressController,则注入AddressRepository。 ArticleRepository如果ArticleController等。我能做到这一点与Ninject,但我想是因为公司非标准原因和性能切换..我如何能做到这一点与AutoFac?或者我有反模式?

回答

1

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

因此,每个仓库都应该有自己的抽象。这里有两条路径可供选择:

  1. 为每个存储库赋予其自己的唯一非泛型抽象,如IArticleRepository和`IAddressRepository。
  2. 定义一个通用IRepository<TEntity>抽象。这样,控制器可依赖于任何IRepository<Article>IRepository<Address>,你有编译时支持,您都秉承了LSP。