[英]Using ApplicationDbContext with Dependency Injection in an n-layered architecture
[英].NET: n-layered architecture with repository, services and proper DI
可能是這個問題已經被討論和回答了,我只是找不到合適的鏈接。 問題是:如何使用存儲庫和 DI 正確實現 3 層(表示、業務邏輯、數據訪問)。
“通常的 3 層架構”:
“正確的 3 層架構(或干凈的架構)”:
這樣我們的 BL 是自包含的,對 UI 或 DAL 沒有任何依賴,這很好。
我想實現一個存儲庫來對數據存儲進行另一個抽象。 在這種情況下,我在 BL 中有 IRepository 接口,BL 中的所有內容都是針對這個通用接口進行編程的。 接口的實現在 DAL 中。 出現的問題是如何注冊存儲庫,如果我的組合根(我注冊依賴項的地方)在表示層中,因為它是我的應用程序實際啟動的地方。 但它沒有對 DAL 的引用。 選項是:
問題是互聯網上的很多文章實際上都顯示了這個問題中的圖片,但是在他們的代碼中有從 Presentation 到 DAL 的引用,這是誤導性的。 示例: https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures (圖 5-9 表示這是一個運行時依賴項,但在他們的代碼中https://github.com/dotnet-architecture/eShopOnWeb這是一個參考)
如果 Presentation 有對 DAL 的引用(在干凈的架構中,這個層通常稱為基礎設施),以便在 DI 中正確注冊依賴關系,那沒關系。 主要是確保在基礎設施 (DAL) 中實現的類不會在表示層的其他任何地方使用(通常這是在合並拉取請求時控制的,以及為類指定訪問修飾符(內部)在基礎設施中)。
Jason Taylor 在 .NET 中有一個很好的例子來實現一個干凈的架構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.