我在MVC項目中使用Castle Windsor作爲ioc。如何在分層架構中安裝與城堡windsor的依賴關係
我的架構基本上是網絡 - >服務 - >數據
該控制器具有服務的依賴。 服務將數據源作爲數據層中的依賴項。
我的Web層沒有對數據層的引用。我的問題是,我試圖註冊我的服務的依賴項的存儲庫。如果我在我的服務層有一個單獨的容器來註冊存儲庫,我應該如何引導它?
或者我可能會以錯誤的方式解決這個問題。
我在MVC項目中使用Castle Windsor作爲ioc。如何在分層架構中安裝與城堡windsor的依賴關係
我的架構基本上是網絡 - >服務 - >數據
該控制器具有服務的依賴。 服務將數據源作爲數據層中的依賴項。
我的Web層沒有對數據層的引用。我的問題是,我試圖註冊我的服務的依賴項的存儲庫。如果我在我的服務層有一個單獨的容器來註冊存儲庫,我應該如何引導它?
或者我可能會以錯誤的方式解決這個問題。
這個怎麼樣。缺點是你需要硬編碼你的存儲庫DLL的名稱,但你總是可以將它移動到web.config等,這將稍微清潔。
IWindsorContainer container = new WindsorContainer();
// Register repositories
_container.Register(
AllTypes.Pick()
.FromAssemblyNamed("MyDataLayerAssembly")
.WithService
.DefaultInterface());
// Register services
_container.Register(
AllTypes.Pick()
.FromAssemblyNamed(typeof(ISomeService).Assembly.GetName().Name)
.WithService
.DefaultInterface());
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));
您可能只需要調整恰恰發生了什麼傳遞到Register()
方法,以滿足您的需求。然而。
如果您已將數據層功能類(AKA存儲庫)的聯繫人置於域層中,則您的Web層將不必引用數據層。然後,您可以輕鬆地依靠在Web層中初始化的單個容器。
This Question包含進一步的細節。
請參閱mvc extensions瞭解實現此目的的一些高級方法。
因此,讓我說我把與所有實體在域圖層中與我的存儲庫進行接口。這仍然不允許我註冊要使用的IRepository的實現。 – Justin
回答這個問題可以在下面找到 - 參考s1mm0t做了什麼。 – Illuminati
相關:http://stackoverflow.com/questions/2096978/what-is-the-correct-layer-to-configure-your-ioc-container-when-using-a-service-la –
可能的重複[設計 - 在使用Windsor時對象應該在哪裏註冊](http://stackoverflow.com/questions/1410719/design-where-should-objects-be-registered-when-using-windsor) –