统一配置文件中的 RegisterType

RegisterType from unity configuration file

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

使用最新版本的 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>

它现在在 PrismApplicationBase 中称为 RegisterTypes。只需覆盖它并执行您在 ConfigureContainer.

中所做的任何事情

提示:如果您不喜欢放在您和 IUnityContainer 之间的 "abstraction" Prism 7,您可以在 IContainerRegistry 上调用 GetContainer()(它是一个扩展方法)获取隐藏的 IUnityContainer 实例。

谢谢豪金格。我不得不将 Unity.Abstractions nugget 降级到 V3.31 以使配置适用于 prism 7。它不适用于最新版本的 Nugget。