我正在从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>
答案 0 :(得分:0)
现在在RegisterTypes
中称为PrismApplicationBase
。只需重写它,然后执行在ConfigureContainer
中要做的任何事情即可。
提示:如果您不喜欢您和IUnityContainer
之间的“抽象” Prism 7,则可以在GetContainer()
上调用IContainerRegistry
(这是一种扩展方法)来获取隐藏的IUnityContainer
实例。
答案 1 :(得分:0)
感谢Haukinger。我必须将Unity.Abstractions块降级到V3.31,以使配置可与棱镜7一起使用。它不适用于最新版本的Nugget。