我对 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 获得的唯一东西吗?