[英]How to register type in the IoC container from an “Area” in ASP.NET MVC 5 app?
您可以创建一个继承自UnityContainerExtension
的单独的类,并将其放置在您的区域中,如下所示:
public class MyAreaContainerExtension : UnityContainerExtension
{
protected override void Initialize()
{
Container.RegisterType<IDoesSomething, DoesSomething>();
}
}
然后在您的创业公司,
container.AddNewExtension<MyAreaContainerExtension>();
或者,如果您的扩展具有传递给它的构造函数参数(例如其需要的配置数据或应使用的实例),则可以创建扩展的实例,然后执行
container.AddExtension(theExtensionInstanceICreated);
这是一个很好的做法,因为它使您可以使组件注册更接近要注册的类,而不是拥有一个包含数十个甚至一百个甚至更多注册的巨大文件。
这种方法的另一个好处是,随着组件注册变得越来越复杂,您可以为这些扩展编写单元测试,以将扩展添加到容器中,然后从容器中解析对象。
您可能必须注册其他组件才能使用此扩展程序中注册的类型,但是您不想在扩展程序中重复这些注册。 在这种情况下,您可以通过指定必须已经注册的类型来使其明确,如下所示:
public class MyAreaContainerExtension : UnityContainerExtension
{
protected override void Initialize()
{
AssertRequiredRegistrations();
Container.RegisterType<IDoesSomething, DoesSomething>();
}
private void AssertRequiredRegistrations()
{
AssertRequiredRegistration(typeof(ISomeOtherType));
}
private void AssertRequiredRegistration(Type type)
{
if(!Container.IsRegistered(type))
throw new Exception($"Type {type.FullName} must be registered with the container.");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.