【发布时间】:2013-04-02 22:43:53
【问题描述】:
我对 Unity 和 IoC 有点陌生,但对 MVC 不熟悉。我一直在阅读和阅读有关将 Unity 与 MVC 结合使用的信息,而我一直看到的唯一真正有用的东西是能够通过控制器获得免费的 DI。
从此出发:
public HomeController() : this(new UserRepository())
{
}
public HomeController(IUserRepository userRepository)
{
this.UserRepository = userRepository;
}
到这里:
public HomeController(IUserRepository userRepository)
{
this.UserRepository = userRepository;
}
基本上,允许我删除无参数构造函数。这太棒了,我肯定会实现它,但对于所有关于 IoC 库的炒作来说,这似乎并不是那么好。使用 Unity 作为服务定位器的方式听起来很有吸引力,但许多人会认为这是一种反模式。
所以我的问题是,由于无法找到服务以及使用视图和过滤器的一些 DI 机会,使用 Unity 还能获得什么其他好处吗?我只是想确保我不会错过一些很棒的东西,比如对所有类构造函数的免费 DI 支持。
编辑:
我了解将 Unity DI 与 MVC 控制器结合使用背后的可测试性目的。但我所要做的就是添加一个额外的小构造函数,nix Unity,然后我就可以进行同样的 UnitTest。当替代方案更简单时,注册存储库类型和拥有自定义控制器工厂的巨大好处在哪里?另一种选择是原生 DI。我想我真的想知道 Unity(或任何 IoC 库)除了不好的服务定位之外还有什么好处。免费的 Controller DI 真的是我从 Unity 获得的唯一东西吗?
【问题讨论】:
标签: c# asp.net-mvc unity-container