2012-08-30 32 views
1

將我的解決方案的不同層抽象爲單獨的項目(例如DataAccess,BusinessLogic,ApplicationService,UserInterface(ASP.NET MVC))並強制上層僅引用低1層以確保否來自上層的調用可以繞過這個架構,我試圖在我當前的項目中引入構造函數注入(使用Unity)。依賴注入解決方案體系結構

我不像我想的那樣高興,我希望有更好的方法。

我在我的UI層的Global.asax中並不高興,爲了構建容器,我必須從每個單層到數據訪問存儲庫引用每個單個項目。由於現在多層設計可以很容易地避開,這只是感覺不對。

你採取什麼方法來避免這種情況?你是否爲依賴注入創建了一個單獨的項目並讓該項目引用了所有內容?那麼UI層只需要引用依賴注入項目?

有沒有更好的方法來完成這個?

在此先感謝您的建議!

回答

1

這只是感覺不對,因爲現在的多層設計,可以很容易地規避

嘛。你總是可以繞過這一點。你也可以破解你的代碼(或者其他可以訪問它的程序員)。你可以引入錯誤。您可以跳過圖層並直接在UI圖層中使用EF。

但是你不會,因爲這是不好的做法。

但是,您可以使用反射(在運行時加載程序集)跳過這些引用。問題在於其他程序集不會自動包含在安裝項目中或發佈項目時。

如果這不是問題,並且您希望自動完成所有操作:使用我的容器。它讓你在每個項目中都有一個組合根。

public void Application_Start(string[] args) 
{ 
    var registrar = new ContainerRegistrar(); 

    // will load all modules from all assemblies which starts with "MyApp." 
    registrar.RegisterModules(Environment.CurrentDirectory, "MyApp.*.dll"); 

    var container = registrar.Build(); 
} 

更詳細的解釋:

http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container

然後,只需通過在UI層做這個加載所有其他組件