2014-10-01 117 views
0

在我的解決方案使用共享的依賴注入,我有一個主要項目,一個WebUI中項目,以及一些配套子項目,例如的數據庫訪問,通過運行調度作業石英項目石英在整體解決方案

直到最近我在主項目中成功使用ninject,但現在我需要在其他項目中也使用ninject。我可以在整個解決方案中共享依賴關係嗎,意思是從任何地方訪問所有的bean,或者我只能在單個項目中訪問它們?

我試圖將其注入到新的項目,但結合不發現:

No matching bindings are available, and the type is not self-bindable. 

那是正確的,有內部解決方案假設每個僅單個項目內部使用一個以上的ninject內核?或者,還有更好的方法?

回答

3

我認爲Kernel應該與應用程序入口點是一對一的。這是組合根,並且是定義Ninject內核的地方,因此它可以解析將爲應用程序構造的完整對象圖的類型。內核可以由一組NinjectModule實例構造而成。這些模塊是您定義綁定的地方。如果您有多個將使用您定義的類型層次結構的應用程序,我會在您的程序集內部的自定義NinjectModules中創建綁定。然後,根據您的應用程序,您可以在創建內核時混合和匹配模塊。這應該有助於緩解每個應用程序中的綁定重複,並且它們將處於可重用的位置。

特別是在你的情況我會:

  • 創建DomainModule並指定特定於域的所有綁定。
  • 創建一個QuartzModule並指定特定於作業調度的所有綁定。
  • 您也可以創建一個WebUI模塊,但這隻會針對您的WebUI項目,這也是您的組合根。因此,它在未來的應用程序中不可重複使用。如果需要,可以將綁定直接添加到此項目的內核中。如果您有一個特定於WEB的項目,請與您的控制器等說,您可能需要創建一個模塊以供參考。
  • 通過引用其他應用程序中的模塊,在您的WebUI項目中構建內核:kernel.Load(new [] {DomainProject.DomainModule,SchedulingProject.JobModule});

Modules and the Kernel Documentation

1

你可以,但要使它工作,你必須在每個可以運行的項目中創建內核和綁定。因此,如果你有一個網絡prj域邏輯prj控制檯應用程序,你必須在網絡和控制檯內創建內核。這2個prj將引用域名登錄prj然後共享。