Prism 8中如何通过PrismBootstrapper从.config文件注册类型?
Prism 8 从XAML配置文件注册类型的实现方法
在Prism 8中,若基于Unity容器(对应Prism 6默认容器类型),通过PrismBootstrapper(具体为UnityBootstrapper)派生类实现从XAML配置文件注册类型,需按以下步骤操作:
1. 配置文件准备
在项目的App.config中定义Unity配置节及类型注册规则:
<configuration> <configSections> <!-- 注册Unity配置节 --> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> </configSections> <unity> <containers> <!-- 定义容器配置,name需与代码中对应 --> <container name="AppContainer"> <!-- 示例:注册接口与实现类的映射 --> <register type="MyApp.IMyService" mapTo="MyApp.MyService"/> <!-- 可添加更多注册规则 --> </container> </containers> </unity> </configuration>
2. 安装必要NuGet包
确保项目已安装以下包:
Prism.Unity:Prism 8的Unity容器集成包Microsoft.Practices.Unity.Configuration:Unity配置文件支持包
3. 在Bootstrapper中加载配置
重写UnityBootstrapper的ConfigureContainer方法,手动读取配置节并加载到容器中:
using Prism.Unity; using System.Configuration; using Microsoft.Practices.Unity.Configuration; using System.Windows; namespace MyApp { public class AppBootstrapper : UnityBootstrapper { // 创建Shell窗口 protected override DependencyObject CreateShell() { return Container.Resolve<MainWindow>(); } // 初始化Shell protected override void InitializeShell() { Application.Current.MainWindow.Show(); } // 配置容器,加载配置文件 protected override void ConfigureContainer() { // 先执行基类的容器配置逻辑 base.ConfigureContainer(); // 读取配置文件中的Unity配置节 var unityConfigSection = ConfigurationManager.GetSection("unity") as UnityConfigurationSection; // 将配置中的注册规则加载到当前容器(匹配配置中定义的容器名称) unityConfigSection?.Configure(Container, "AppContainer"); } } }
补充说明
- 若使用DryIoc等其他容器:DryIoc原生不支持XAML配置文件加载,需自行解析配置内容并调用容器的注册方法实现,或改用代码注册方式。
- Prism 8中已移除Prism 6里直接的
container.LoadConfiguration扩展方法,需通过Unity配置节的Configure方法完成配置加载。
内容的提问来源于stack exchange,提问作者A.G.
相关产品推荐
相关产品推荐

