5

我對此很新,所以請耐心等待。依賴注入

我有一個使用Service/Repository/EF4模式的MVC應用程序,我試圖使用Ninject。我有它在控制器上工作,他們是構造函數注入服務,但服務是構造函數注入存儲庫,我不知道在哪裏處理這個。

我想讓它每層只知道下面的圖層,是否正確?如果是這樣,MVC應用程序只知道服務層和服務層只知道版本庫層等,所以在我的Ninject模塊在那裏我創建的綁定,我不能說:

Bind(Of IRepository(Of Category)).To(Of EFRepository(Of Category)) 

我在哪裏處理注射?

+0

http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ – 2011-03-04 07:40:11

+0

相關:http://stackoverflow.com/questions/4570750/dependency-injection-turtles-all-the- down-down – 2011-03-04 07:48:51

+0

Duplicate:http://stackoverflow.com/questions/1475575/where-should-i-do-dependency-injection-with-ninject-2 – 2011-03-04 07:50:47

回答

7

對您的問題的評論確實提供了一些有用的信息。

我經常組織這樣的事情來完成你在說什麼 - 這只是其中的一部分直接應用於依賴注入:

  • 設置我的Visual Studio解決方案有一個項目/組件應用程序中的每層。通過這種方式,您必須將一個圖層項目的引用設置爲另一個圖層,以便能夠調用該圖層。例如,您可以設置從MVC應用程序層到服務層的引用,但不從MVC應用程序到存儲庫層,以防止MVC應用程序直接訪問存儲庫層。
  • 在每個圖層的項目中,我把應該在項目頂部命名空間中使用的接口和類,並將接口和其他類的實際實現隱藏在通常稱爲「Impl」的子命名空間中,或類似的東西;這些類也被聲明爲「內部」,這確保它們只能從程序集(層)內使用,而不能從錯誤的另一層使用。
  • 每個項目/層聲明一個將公共接口綁定到內部實現類的NInject模塊。
  • 在應用程序的組合根目錄(請參閱Mark Seeman的鏈接:Where should I do Injection with Ninject 2+ (and how do I arrange my Modules?))中,創建了一個加載這些模塊的內核。
  • 實際注入主要是通過構造函數注入來完成的,這意味着類本身並不真正瞭解注入發生的任何事情(有時如果有不明確的構造函數,則必須使用[注入]屬性)。
+0

因此,每個項目**必須有一個Ninject模塊,配置下一層的綁定以保持耦合鬆散?然後應用程序的根(Global.asax)配置所有這些內核?我有點困惑MVC應用程序將如何知道RepositoryNinjectModule? – Sam 2011-03-06 21:47:43