Рекурсивно регистрировать типы в контейнере Unity - PullRequest
0 голосов
/ 06 ноября 2019

Я работаю над существующим проектом asp.net. В этом проекте я использую контейнер Unity версии 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 голосов
/ 06 ноября 2019

Вы можете зарегистрировать все зависимости с помощью единицы конфигурации.

Сначала добавьте единицу в секции конфигурации в 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");
...