来自unity配置文件的RegisterType

问题描述 投票:1回答:2

我正从Prism 4迁移到Prism 7.1,我似乎无法找到已从最新的Prism版本中删除的ConfigureContainer方法。过去,我曾使用此方法从文件系统加载统一配置。

使用最新版本的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文件中添加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>
unity-container prism configuration-files
2个回答
0
投票

它现在在RegisterTypes被称为PrismApplicationBase。只需覆盖它,并做任何你在ConfigureContainer做的事情。

提示:如果你不喜欢你和IUnityContainer之间的“抽象”Prism 7,你可以在GetContainer()上调用IContainerRegistry(这是一种扩展方法)来获取隐藏的IUnityContainer实例。


0
投票

感谢Haukinger。我不得不将Unity.Abstractions nugget降级到V3.31以使配置与棱镜7一起工作。它不适用于最新版本的Nugget。

© www.soinside.com 2019 - 2024. All rights reserved.