0

我在MVC項目中使用Castle Windsor作爲ioc。如何在分層架構中安裝與城堡windsor的依賴關係

我的架構基本上是網絡 - >服務 - >數據

該控制器具有服務的依賴。 服務將數據源作爲數據層中的依賴項。

我的Web層沒有對數據層的引用。我的問題是,我試圖註冊我的服務的依賴項的存儲庫。如果我在我的服務層有一個單獨的容器來註冊存儲庫,我應該如何引導它?

或者我可能會以錯誤的方式解決這個問題。

+0

相關:http://stackoverflow.com/questions/2096978/what-is-the-correct-layer-to-configure-your-ioc-container-when-using-a-service-la –

+0

可能的重複[設計 - 在使用Windsor時對象應該在哪裏註冊](http://stackoverflow.com/questions/1410719/design-where-should-objects-be-registered-when-using-windsor) –

回答

0

這個怎麼樣。缺點是你需要硬編碼你的存儲庫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()方法,以滿足您的需求。然而。

0

如果您已將數據層功能類(AKA存儲庫)的聯繫人置於域層中,則您的Web層將不必引用數據層。然後,您可以輕鬆地依靠在Web層中初始化的單個容器。

This Question包含進一步的細節。

請參閱mvc extensions瞭解實現此目的的一些高級方法。

+0

因此,讓我說我把與所有實體在域圖層中與我的存儲庫進行接口。這仍然不允許我註冊要使用的IRepository的實現。 – Justin

+0

回答這個問題可以在下面找到 - 參考s1mm0t做了什麼。 – Illuminati