Prism框架支持WPF应用模块化开发:一、安装Prism.Core与Prism.Wpf包;二、模块类实现IModule接口并注册视图;三、用DirectoryModuleCatalog配置模块路径;四、自定义Bootstrapper集成模块生命周期;五、通过IContainerRegistry注册跨模块服务。

如果您正在开发一个大型WPF桌面应用,且需要将功能按业务域拆分为独立可维护、可加载的单元,则Prism框架提供了标准化的模块化架构支持。以下是使用Prism构建模块化WPF应用的具体方法:
一、安装Prism.Core与Prism.Wpf NuGet包
Prism模块化依赖于核心基础设施和WPF专用扩展组件,需在项目中引入对应NuGet包以启用模块发现、生命周期管理及区域导航等能力。
1、在解决方案资源管理器中右键点击主应用程序项目,选择“管理NuGet程序包”。
2、切换到“浏览”选项卡,搜索并安装Prism.Core与Prism.Wpf两个包(版本需保持一致,推荐使用8.x或9.x稳定版)。
3、确保所有模块项目也引用相同版本的Prism.Core,但无需重复引用Prism.Wpf。
二、定义IModule接口实现类
每个模块必须实现Prism.Modularity.IModule接口,该接口声明了模块初始化时机与依赖关系,是Prism识别和加载模块的契约基础。
1、在独立的类库项目中新建一个类,例如命名为UserModule。
2、让该类继承IModule接口,并实现Initialize方法,在其中注册视图、服务或区域行为。
3、在Initialize方法内调用RegionManager.RegisterViewWithRegion注册视图到指定区域,例如MainContentRegion。
三、配置模块目录与加载策略
Prism支持多种模块发现方式,包括代码注册、XAML配置和目录扫描;使用DirectoryModuleCatalog可动态加载指定路径下符合命名规范的模块程序集。
1、在App.xaml.cs的OnStartup方法中,创建DirectoryModuleCatalog实例,并设置ModulePath为模块所在文件夹路径,例如"./Modules"。
2、将该catalog赋值给Bootstrapper的ModuleCatalog属性。
3、确保各模块程序集DLL复制到输出目录的Modules子文件夹中,且文件名匹配模块类全名或包含Module字样。
四、在Bootstrapper中集成模块生命周期
Bootstrapper是Prism应用的启动协调器,负责容器初始化、Shell创建及模块加载调度;必须重写CreateModuleCatalog与InitializeShell方法以激活模块机制。
1、新建自定义Bootstrapper类,继承Prism.Bootstrapper
2、重写CreateModuleCatalog方法,返回已配置的DirectoryModuleCatalog或ConfigurationModuleCatalog实例。
3、重写InitializeShell方法,在基类调用后执行Application.Current.MainWindow.Show(),确保Shell在模块初始化完成后显示。
五、通过IContainerRegistry注册跨模块服务
模块间通信与共享逻辑需依赖依赖注入容器,Prism默认使用Autofac或DryIoc;通过IContainerRegistry可在模块Initialize阶段注册仅本模块使用或全局共享的服务实例。
1、在模块的Initialize方法参数中接收IContainerRegistry容器注册器对象。
2、调用RegisterSingleton
3、若需限定作用域,使用RegisterScoped










