RegisterType из единого конфигурационного файла - PullRequest
1 голос
/ 22 марта 2019

Я мигрирую с Prism 4 на Prism 7.1, и я не могу обнаружить, что метод ConfigureContainer был удален из последней версии Prism. В прошлом я использовал этот метод для загрузки конфигурации Unity из файловой системы.

с последней версией библиотеки Prism, это представляется невозможным. Я уже исследовал опцию ModuleConfiguration, которая, по моему мнению, не позволяет вводить зависимости через файл конфигурации таким же образом.

Есть ли альтернативный подход для этого, где я могу обеспечить регистрацию типов через файл конфигурации.

Вот как я это делал в прошлом:

1- В BootStrapper был переопределен следующий метод:

protected override void ConfigureContainer()
        {
            base.ConfigureContainer();

            var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            UnityConfigurationSection section = (UnityConfigurationSection)config.GetSection("unity");
            if (section != null)
            {
                section.Configure(Container);
            }
        }

2- Добавить раздел конфигурации в файл app.config:

<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />

3 - Добавить файл конфигурации для единства, который выглядит следующим образом:

<unity xmlns="schemas.microsoft.com/practices/2010/unity">
  <sectionExtension type="Unity.FactoryConfig.FactoryConfigExtension, Unity.FactoryConfig"/>
  <alias alias="Singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity"/>
  <alias alias="ConfigFactory" type="Vms.Pt.Common.DependencyInjection.ComponentBuilder.ConfigClassFactory`1, Vms.Pt.Common.DependencyInjection.ComponentBuilder"/>
  <container>

    <!--Modal/popup provider service-->
    <register type="IPopupService, GUI.Infrastructure"
                 mapTo="Services.PopupService, GUI.Infrastructure">
      <lifetime type="Singleton"/>
    </register>

  </container>
</unity>

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Спасибо, Хаукингер. Мне пришлось понизить слепок Unity.Abstractions до V3.31, чтобы заставить конфигурацию работать с Prism 7. Он не работает с последней версией Nugget.

0 голосов
/ 23 марта 2019

Теперь оно называется RegisterTypes в PrismApplicationBase.Просто переопределите это и сделайте все, что вы сделали бы в ConfigureContainer.

Подсказка: если вам не нравится "абстракция" Prism 7, помещенная между вами и IUnityContainer, вы можете вызвать GetContainer() наIContainerRegistry (это метод расширения), чтобы получить скрытый экземпляр IUnityContainer.

...