1

我已經做了相當多的研究,引入依賴注入框架爲我的組織 - 遲到總比不到好!到目前爲止,我的研究集中在Castle.Windsor。這項研究使我瞭解了安裝人員,攔截器(特別是針對伐木橫切關注點)和設施等概念,我打算使用這些概念。解決方案的架構使用Castle.Windsor安裝程序

我的問題是我將如何構建我的解決方案(我的項目在Visual Studio中的架構),以便在未來的某個時間點可以取代DI框架(也許如果更好的事情在兩年內出現)。

我發展我的組織架構庫,它使用了常見的服務定位器服務的位置,但對於容器的配置?

如果我把我的安裝在同一個項目的服務實現,那麼我的前端項目將需要引用這些項目(假設流利配置)時,我與配置安裝我的容器。說這些服務的實現對於數據訪問層的關注,我真的不希望我的前端引用這個特定層(100%確保無顧慮泄漏)。

我還沒有真正發現任何解決我的問題,所以我想我可能是在錯誤的軌道與我的思路上。我不會冒犯你,如果你告訴我:)

無論如何,我已經開發了一個概念證明,其中我的每個項目層(例如XXXOrganisation.Data.Model.NHibernate - 存儲規範的具體實現等)將具有對於容器的配置-問題,例如安裝程序(例如XXXOrganisation.Data.Model.NHibernate.Castle)對應的DLL項目。我的計劃是再使用ILMerge到我的城堡具體配置的所有項目合併成1個項目,這將通過前端(Web的應用程序)獲得引用。

這是一個可行的辦法?

除了上述,我也想註冊某些服務使用incerceptors喜歡的事情記錄。我想我的城堡配置項目(包含安裝程序)可能會引用一個XXXOrganisation.Aop(或簡單地說是一個XXXOrganisation.Castle基礎項目)這種事情...

我真的很感謝有人比我更有經驗幫助我解決我的問題,或者提供一些建議。

親切的問候, 瑞安。

回答

2

如果您正在編寫框架或庫(not the same thing),則根本不應使用容器,而應該使用architect it to support any kind of Dependency Injection

只有應用程序應該使用DI容器 - 從他們組成根源。

+0

我可以看到我最初的描述是有點難以破譯 - 是我不好。 忘記提及框架或庫 - 它只會混淆問題。 考慮我的數據層,它具有實現已定義合同的存儲庫和規範。這些具體實現是通過安裝程序註冊的。 我的安裝人員去哪裏合適?在定義具體實現的同一個項目中? –

+0

如果我將它們放在這裏用於數據層(例如RespositoryInstaller,它註冊了ICUstomerRepository實現),那麼當我在Web應用程序項目的Global.asax中配置我的容器時,我需要對數據層的引用DLL。我不想要這個聯繫。這就是爲什麼我創建「 .Data.Model。 .windsor」項目,其中只包含用於在容器上配置數據層服務的代碼。那麼就不存在泄漏問題的可能性(這在我的團隊中經常發生)。這是構建解決方案的好方法嗎? –

+0

謝謝你的迴應先生。 –