我想了解如何在 MVC4 应用程序中解决统一命名类型注册。
我正在使用“Unity 3.0”和“Unity boostrapper for ASP.NET MVC”。
我知道 unity 是使用 DependencyResolver 注册的,所以我可以使用依赖解析器方法来获取注册类型的实例。
当我想获得简单的注册时,这很好用。
例如
//Registration
container.RegisterType<IFootballer, VanPersey>();
//Instantiation
var footballer1 = DependencyResolver.Current.GetService<IFootballer>();
但是有时当我想获得对命名类型注册的引用时,IDependencyResolver 接口似乎没有提供适当的方法来获取命名类型注册实例。
如果我可以直接访问统一容器,我会执行以下操作:
//Registration
container.RegisterType<IFootballer, VanPersey>("Attacker" );
container.RegisterType<IFootballer, NemanjaVidic>("Defender");
//Instantiation
unityContainer.Resolve<IFootballer, Footballer>("Attacker")
所以我的问题是,在 MVC 应用程序中使用统一以获取命名注册实例的最合适方法是什么。即可以访问统一容器吗?
请注意,这个问题不适用于任何生产实现,我正在研究 Unity(以及第一次 IoC 容器)并试图获得更好的理解。
我知道在生产中我很可能会通过控制器构造函数传递依赖项,这实际上导致了另一个问题。
在以下示例中使用控制器构造函数注入时,如何指示要解析的命名类型:
//Registration
container.RegisterType<IFootballer, VanPersey>("Attacker" );
container.RegisterType<IFootballer, NemanjaVidic>("Defender");
//Instantiation
public HomeController(IFootballer footballer)