0

我目前裏面有一個應用程序的多個層的多層項目.NET解決方案實現AutoFac,MVC的UI,業務邏輯的中間層和後端存儲庫層與我的數據庫通信。我在哪裏把AutoFac在多個項目解決方案

我將使用AutoFac進行依賴關係並解決圖層之間的依賴關係。我有一個關於它的架構的問題。

我已經計劃在UI層(MVC Web應用程序)中設置AutoFac模塊,但是這會導致Web應用程序添加對我的解決方案中所有項目的引用,我並不熱衷於我相信UI層應該不知道存儲庫項目。

如果我種田了AutoFac設置到中介項目和住房所有項目的參考,這將抽象出的邏輯。但是我在這裏遇到了問題,我無法啓動初始啓動,甚至無法啓動xml配置(如果有的話)。

這裏的其他人有什麼看法,哪裏是安置我的AutoFac安裝的最佳位置?

+0

相關:https://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application – Steven

回答

1

在我看來,有referecing你的UI層中的項目沒有問題,beucase你必須註冊在容器上的所有類型。這裏的問題是每個圖層所具有的依賴性,我的意思是圖層之間的耦合類型。由於您正在使用圖層之間的抽象,因此不需要參考。我們有一個需要使用一切的項目(Asp.Net MVC,一些Windows服務和一個WPF項目),我保留我的Container(我使用MS Unity)的初始化到另一個類庫中,並且引用所有內容,因爲我們需要所有類型來執行每個依賴項的註冊。我referece在項目(Asp.Net MVC中,Windows服務,WPF)這個項目,並將它應該是(application_start事件在Global.asax中的Web,OnStart事件在Windows服務,program文件中的WPF)。

在評論中提出你的問題..你已經在另一個類庫中保存了一些東西(我們稱之爲Project.Starter),然後你將要使用的項目引用這個項目(啓動器)(asp.net mvc ,控制檯應用程序,winforms,wpf,windows服務,wcf等)。您無需引用Starter中的UI項目。

調用可訪問方法來初始化所有東西(容器,sessionFactory如果您使用的是NHibernate),並確保您在正確的位置爲每種類型的項目執行操作,如前所述(Global.asax中的application_start事件,Windows服務中的OnStart事件,WPF中的program文件等)。

+0

感謝您的信息。我可以問你如何爲你的mvc項目(控制器,過濾器,依賴解析器等)設置DI,如果這種設置在另一個類庫中。我認爲它不能引用mvc項目或者會有循環引用。 – amateur

+2

Autofac在[Composition Root](http://blog.ploeh.dk/2011/07/28/CompositionRoot/)中配置。 Composition Root本身就是一個圖層,但對於Web應用程序來說,將該圖層與UI圖層放在同一個程序集中很正常。但這並不意味着這變成了一層。在單個程序集(這是一個部署工件)中有多個層(這是邏輯工件)是很正常的。在一個程序集中有多個圖層沒有任何問題。 – Steven

+0

+1 @Steven,我同意 –

相關問題