在Unity容器中递归注册类型



我正在处理一个现有的asp.net项目。在该项目中,我使用统一容器5.2.0.0版本进行依赖项注入。由于这是一个大项目,有很多类型需要注册到统一容器中,而且这些类型有更多的依赖关系。它递归地增长。有没有任何方法可以管理我的统一容器的分层增长,或者我应该注册所有这些依赖项。

//For Type1
container.RegisterType<ITypeA, TypeA>();
container.RegisterType<ITypeB, TypeB>();
container.RegisterType<ITypeC, TypeC>();
//For Type2
container.RegisterType<ITypeD, TypeD>();
//For TypeA
container.RegisterType<ITypeP, TypeP>();
container.RegisterType<ITypQ, TypeQ>();
//For TypeP
container.RegisterType<ITypeS, TypeS>();
container.RegisterType<ITypR, TypeR>();

现在我的容器是这样的。事实上比这更糟糕。那么我该如何摆脱它呢。

您可以使用统一配置注册所有依赖项。

首先将unity添加到App.config中的配置部分,并给出源(MyUnityDependencies.config等(:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity configSource="MyUnityDependencies.config" />
...
</configuration>

MyUnityDependencies.config中,您可以为每个容器添加寄存器类型:

<?xml version="1.0"?>
<unity>
<container name="MyContainer">
<register name="Dependency1"
type="ITypeA"
mapTo="TypeA" >
</register>
<register name="Dependency2"
type="ITypeB"
mapTo="TypeB" >
</register>
...
</container>
</unity>

最后,您可以使用LoadConfiguation注册所有依赖项

IUnityContainer container = new UnityContainer();
container.LoadConfiguration("MyContainer");

最新更新