我正在制作一个带有Onion架构的ASP.NET MVC网站。我已经实现了一个存储库模式,现在正在我的项目中创建一个Controller方法。这是我的架构:
现在在我的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/)
答案 0 :(得分:2)
此时MVC(UI)是组合根,需要知道所有层才能将它们注册到DI容器中。
启动将在注册时直接引用实现,或者通过从该层公开的扩展方法间接引用实现。无论哪种方式,组合根都需要引用所有较低层(如果要将它们添加到DI容器中)。
控制器还应该依赖于较低层的抽象,而不是结核。
如果将存储库直接注入控制器,那么我建议检查设计,因为这可能表明职责混合。