洋葱架构:可以 UI 依赖域

Onion Architecture : Can UI depend on Domain

我正在制作一个具有洋葱架构的 ASP.NET MVC 网站。我已经实现了一个存储库模式,现在正在我的项目中创建一个 Controller 方法。这是我的架构:

  1. 域:实体/域接口
  2. 存储库:使用 Entity Framework Code First
  3. 的通用存储库(目前)
  4. 服务:调用存储库的通用服务
  5. MVC

现在在我的 MVC 项目中,我需要访问存储库,但根据 Jeffrey Palermo 的说法,MVC 依赖于服务和域,但没有提到存储库。

我可以让我的 UI 依赖于 Repository 吗?

我现在没有依赖项无法做任何事情,因为服务创建依赖于存储库。我已经尝试修改 Startup.cs 以不直接在我的控制器中使用 Repository 对象,但这仍然意味着我需要添加对 Repository 的引用(参见 http://dotnetliberty.com/index.php/2015/10/15/asp-net-5-mvc6-dependency-injection-in-6-steps/

此时 MVC (UI) 是组合根,它需要知道所有层才能将它们注册到 DI 容器。

启动将在注册时直接引用实现,或者通过从该层公开的扩展方法间接引用实现。无论哪种方式,如果要将组合根添加到 DI 容器,组合根都需要引用所有较低层。

控制器也应该依赖于较低层的抽象而不是具体化。

如果将存储库直接注入控制器,那么我建议检查设计,因为这可能表明职责混合。