洋葱架构:UI可以依赖于域

时间:2017-06-20 14:58:21

标签: asp.net-mvc onion-architecture

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

  1. 域:实体/域接口
  2. 存储库:使用实体框架代码优先的通用存储库(现在)
  3. 服务:调用存储库的通用服务
  4. MVC
  5. 现在在我的MVC项目中我需要访问存储库但是根据Jeffrey Palermo的说法,MVC依赖于Service和Domain,但没有任何关于存储库的说法。

    我可以让我的UI依赖于存储库吗?

    现在没有依赖关系我什么也做不了,因为服务创建依赖于Repository。我尝试修改Startup.cs以不直接使用我的控制器中的Repository对象,但它仍然意味着我需要添加对Repository的引用(参见http://dotnetliberty.com/index.php/2015/10/15/asp-net-5-mvc6-dependency-injection-in-6-steps/

1 个答案:

答案 0 :(得分:2)

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

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

控制器还应该依赖于较低层的抽象,而不是结核。

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