在Unity容器中递归注册类型

时间:2019-11-06 08:38:06

标签: c# asp.net dependency-injection unity-container

我正在处理一个现有的asp.net项目。在该项目中,我使用统一容器版本5.2.0.0进行依赖项注入。由于这是一个大项目,因此有很多类型可以在unity容器中注册,而这些类型又具有更多的依赖性。它递归地增长。有什么方法可以管理我的统一容器的分层增长,还是应该注册所有这些依赖项?

//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>();

现在,我的容器就是这样。实际上比这更糟。那么我该如何摆脱它。

1 个答案:

答案 0 :(得分:0)

您可以使用unity config注册所有依赖项。

首先在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");