2012-10-25 40 views
7

我可以看到類似的問題先前已經被問到過,但是對於DI和.Net來說我是全新的,我無法掌握整個解決方案,或者可能找不到合適的源代碼....如何在程序集中使用Ninject

  • 我有程序集WebAPI,BL,DL。
  • 的WebAPI依賴於BL,
  • BL取決於DL,
  • 的WebAPI不引用DL,我想保持不變。有更多的程序集,但這足以說明問題。

WebAPI具有應用程序啓動部分,因此我可以使用它來初始化Ninject內核併爲WebAPI項目註冊依賴項。

我怎樣才能達到相同的BL和其他組件?

回答

3

有幾種不同的方式,你可以使用Ninject ConventionsISomething自動地解析爲同名的實現(例如,IThing - >Thing),或者你可以建立在每個註冊的依賴組件Ninject Module (BL中的模塊可以將模塊加載到DL中)。

您採用的方法取決於您是否需要爲不同的對象定義不同的作用域,例如,如果您希望將某些事情解析爲可能影響您使用的方法的單例。

+0

謝謝Trevor,我理解這個概念,但不知道如何以及在BL Assembly中如何實現邏輯。 – user1767363

+0

你能否提供一個例子說明每個模塊如何爲Ninject設置內核?我正在嘗試學習如何解決這個問題。 – Wavel

+0

@Wavel - 我添加了答案的鏈接。 –

0

我認爲Mark Seemann's advice about this非常棒 - 在應用程序的最高層創建一個組合根。對於Web應用程序,這意味着在Globals.asax文件中。我可以詳細說明這一點的好理由,但是鏈接的博客文章做得更好。

這確實打破了您嘗試實現的分層,但只是幾乎沒有,而我認爲是合適的方式。如果您的網頁層數適當薄(即,您可以很容易地用厚客戶端來替換它),那麼這不是一個大的損失。如果您真的對此不利,您可以在DL中爲BL創建組合根。

相關問題