c# - 使用 ASP.NET MVC 4 应用程序实例化 Unity 命名类型注册

标签 c# asp.net-mvc inversion-of-control unity-container ioc-container

我想了解如何在 MVC4 应用程序中解析统一命名类型注册。

我正在使用“Unity 3.0”和“用于 ASP.NET MVC 的 Unity boostrapper”。

我知道 unity 是用 DependencyResolver 注册的,所以我可以使用依赖解析器方法来获取已注册类型的实例。

当我想取回一个简单的注册时,这很好用。

例如

//Registration
container.RegisterType<IFootballer, VanPersey>();

//Instantiation 
var footballer1 = DependencyResolver.Current.GetService<IFootballer>();

但有时当我想要获取对命名类型注册的引用时,IDependencyResolver 接口(interface)似乎没有提供适当的方法来获取命名类型注册实例。

如果我可以直接访问统一容器,我会执行如下操作:

//Registration 
container.RegisterType<IFootballer, VanPersey>("Attacker" );
container.RegisterType<IFootballer, NemanjaVidic>("Defender");

//Instantiation 
unityContainer.Resolve<IFootballer, Footballer>("Attacker")

所以我的问题是,在 MVC 应用程序中使用 unity 以获取命名注册实例的最合适方法是什么。即可以访问统一容器吗?

请注意,这个问题不适用于任何生产实现,我正在研究 Unity(和 IoC 容器,这是第一次)并试图获得更好的理解。

我知道在生产中我很可能会通过 Controller 构造函数传递依赖项,这实际上让我想到了另一个问题。

在以下示例中使用 Controller 构造函数注入(inject)时,如何指示您要解析的命名类型:

//Registration 
container.RegisterType<IFootballer, VanPersey>("Attacker" );
container.RegisterType<IFootballer, NemanjaVidic>("Defender");

//Instantiation 
public HomeController(IFootballer footballer)

最佳答案

很可能容器本身也已注册,以便解析器可以解析它:

var container = DependencyResolver.Current.GetService<IUnityContainer>();
var vanPersey = container.RegisterType<IFootballer, VanPersey>("Attacker" );

还没有用解析器尝试过,但它总是像 ServiceLocator 那样工作。

关于c# - 使用 ASP.NET MVC 4 应用程序实例化 Unity 命名类型注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16961189/

相关文章:

c# - 如何获取空列表的值类型?

c# - 如何在.net nest中更新现有已过滤的Elasticsearch查询

c# - 如何在 View 中引用隐式类型模型

c# - 加载 Ninject 模块后设置所有绑定(bind)的范围

检查位数组状态的 C# 性能和最佳实践

c# - Windows Mobile - 检测何时按下关机按钮

asp.net-mvc - 带有 "-"的 SEO 友好 URL

javascript - 如何实现代码按钮来格式化文本区域中的文本?

java - spring:一个接收类列表的bean

java - 如何使用类加载器实例化 spring bean?