Asp.net-Mvc
DAL -> BLL <- GUI + 組合根。如何設置 DI 綁定?
我已經製作了一個三層應用程序,其參考按照此答案中的描述進行:
DAL with Repositories -> BLL with services and IRepository <- Asp.net mvc-app為了通過依賴注入執行它,我看到了一些選項:
- 從 web-app 添加對 DAL 的引用,以便能夠在應用程序啟動時設置綁定。
2.使用帶有xml-configuration的容器
(3.使用反射載入dal-assembly並查找類型)
選項 1. 很簡單,也可以將 DAL.dll 複製到 bin,但後來我突然重新引入了我努力擺脫的參考。現在可以直接訪問儲存庫。選項 2 和 3 似乎不必要地複雜。
難道沒有別的辦法了嗎?
Mark Seemann 的回答給了我這個變體的想法:
DAL with Repositories -> BLL with services and IRepository <- Asp.net mvc-app ^------------------------^--------- Composition Root <-------´這是為了說明,不是讓 Web 項目引用 DAL,而是引用一個單獨的組合根項目,該組合根項目同時引用 DAL 和 BLL。composition-root-project 有一個類,其中有一個定義綁定的方法。它提供了這些額外的好處:
- 只有三層。在團隊中,四層將是一個艱難的賣點。
- 確保松耦合。無法從視圖程式碼訪問 DAL。
- 更好的工具支持。控制器保留在標準位置,因此可以在上下文菜單中訪問“添加控制器”,並且在控制器程式碼中突出顯示缺失的視圖。此外,無需配置或編寫自定義控制器工廠。
我看不出有什麼大的缺點。
將 ASP.NET MVC 應用程序一分為二:
- 一部分是您的原始 ASP.NET MVC 應用程序,但沒有任何邏輯。只需將Composition Root和您的視圖(.aspx 等)保留在此項目中即可。由於這是合成根,您可以引用所有其他項目。但是,由於所有邏輯都已被提取,因此現在這是一個Humble Object,因此可以在此級別擁有所有引用。
- 將所有邏輯(控制器等)提取到應用程序模型項目中,該項目只是一個引用 ASP.NET MVC 二進製文件的普通庫項目 (.dll)。該項目需要引用 BLL 才能訪問介面,但這沒關係。但是,應用程序模型和 BLL 都有效地屏蔽了 DAL。
生成的分層如下所示:
- ASP.NET MVC 應用程序
- 應用模型
- BLL
- 來自