2014-10-02 78 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。