2009-11-09 86 views
12

NInject的模塊架構似乎很有用,但我擔心它會陷入一片混亂。你如何組織你的NInject模塊?

你如何組織你的模塊?你把它放在哪個組件中,你如何決定在哪個模塊中佈線?

+0

好問題。我希望看到更多的討論,因爲我分享你的擔憂。每個子系統有一個模塊聽起來合理,但我也有模塊用於單元測試的不同連接依賴關係。 – JulianM 2009-11-18 03:38:37

回答

7

每個子系統都有一個模塊。當然,什麼是分類爲「子系統」的定義取決於...

在某些情況下,由於較低級別的子系統/組件無法處理做出最後的權威性決定 - 在某些情況下,這可以通過將參數傳遞到模塊來實現。

2

在使用NInject幾年後回覆我自己的帖子。

這是我如何安排我的NInjectModules,使用書店爲例:

  • BookStoreSolution
    • Domain.csproj
    • Services.csproj
      • CustomerServicesInjectionModule.cs
      • PaymentProcessingInjectionModule.cs
    • DataAccess.csproj
      • CustomerDatabaseInjectionModule.cs
      • BookDatabaseInjectionModule.cs
    • CustomSecurityFramework.csproj
      • CustomSecurityFrameworkInjectionModule.cs
    • PublicWebsite.csproj
      • PublicWebsiteInjectionModule.cs
    • Intranet.csproj
      • IntranetInjectionModule.cs

這是什麼要說的是,系統中的每個項目都帶有一種或多種預包裝NInject模塊,知道如何爲該項目的類設置綁定。

大多數情況下,單個應用程序不希望對項目提供的默認注入模塊進行重大更改。例如,如果我正在創建一個需要導入DataAccess項目的小型WinForm應用程序,通常我也希望將所有項目的Repository <>類綁定到其關聯的IRepository接口。

與此同時,沒有任何東西強制單個應用程序使用特定的注射模塊。應用程序可以創建自己的注入模塊,並忽略它正在導入的項目提供的默認模塊。通過這種方式,系統仍然保持靈活性和解耦。

+0

所以......這意味着你必須在每個具有模塊的項目中包含一個Ninject包/參考?我希望在我的調用者程序集(例如,Web項目)中有一個地方註冊我需要的每個服務,然後只有該程序集將直接引用Ninject。思考? – 2012-05-17 17:04:53

+0

是的,這是該設置的缺點。然而,除非你有一個從不使用屬性注入或使用Kernel.Get <>()的非常純粹的應用程序,否則我通常最終會得到一個NInject引用。 – cbp 2012-05-18 02:35:43

+0

好吧......我剛剛完成了一個使用Unity for DI的項目,並且我在web項目的引導程序中結束了一個很長的RegisterServices方法。沒有一個我的類庫項目直接依賴Unity或EntLib。他們都利用構造函數注入。我認爲這很好。 – 2012-05-21 14:17:38