【发布时间】:2017-10-18 15:15:03
【问题描述】:
我正在构建一个 ASP MVC 3 应用程序,在该应用程序中我使用 Unity 作为 IOC 容器,并在 DependencyResolver 上注册它。在我的控制器中,我可以这样做:
DependencyResolver.Current.GetService(GetType(IViewAllPersonsHandler))
然后,当我编写单元测试时,我会在测试中重新定义映射以使用模拟对象。
我的一位同事告诉我,这样做被视为一种反模式。
谁能告诉我是否是这种情况以及为什么?
我知道通常我应该在构造函数中注入我的依赖项,但是随着控制器的增长,构造函数参数变得很长。
谢谢
【问题讨论】:
-
你不应该从你的控制器调用 DependencyResolver,坚持使用构造函数注入。您的控制器似乎正在做太多事情。您能否将一些依赖项移动到其他层,甚至可能是过滤器或拆分控制器。
-
我使用的是 CQS 架构,因此对于每个操作我都有一个单独的处理程序或命令(例如:UpdatePersonBankCommand、UpdatePersonAddressCommand...)。我会试试看是否可以拆分控制器,但我不确定是否可以。
标签: c# asp.net-mvc-3 unity-container