Asp.net-Mvc

DAL -> BLL <- GUI + 組合根。如何設置 DI 綁定?

  • February 14, 2016

我已經製作了一個三層應用程序,其參考按照此答案中的描述進行:

DAL with Repositories -&gt; BLL with services and IRepository &lt;- Asp.net mvc-app

為了通過依賴注入執行它,我看到了一些選項:

  1. 從 web-app 添加對 DAL 的引用,以便能夠在應用程序啟動時設置綁定。

2.使用帶有xml-configuration的容器

(3.使用反射載入dal-assembly並查找類型)

選項 1. 很簡單,也可以將 DAL.dll 複製到 bin,但後來我突然重新引入了我努力擺脫的參考。現在可以直接訪問儲存庫。選項 2 和 3 似乎不必要地複雜。

難道沒有別的辦法了嗎?

Mark Seemann 的回答給了我這個變體的想法:

DAL with Repositories -&gt; BLL with services and IRepository &lt;- Asp.net mvc-app
^------------------------^--------- Composition Root &lt;-------´

這是為了說明,不是讓 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
  • 來自

引用自:https://stackoverflow.com/questions/5267525