来自统一配置文件的RegisterType

时间:2019-03-22 20:55:04

标签: unity-container prism configuration-files

我正在从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>

2 个答案:

答案 0 :(得分:0)

现在在RegisterTypes中称为PrismApplicationBase。只需重写它,然后执行在ConfigureContainer中要做的任何事情即可。

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

答案 1 :(得分:0)

感谢Haukinger。我必须将Unity.Abstractions块降级到V3.31,以使配置可与棱镜7一起使用。它不适用于最新版本的Nugget。