Prism框架用的是新版本的,Prism7.1。关于其中的变动,感兴趣的参考https://www.cnblogs.com/hicolin/p/8694892.html
如何告诉Shell(我们的宿主程序)去Load哪些Module,在App启动之初,需要创建配置一个ModuleCatalog(用来管理Module)。
方式一:通过配置文件(App.config)创建模块目录(ModuleCatalog)
1、新建Prism Blank App(WPF) 项目:BlankApp7
BlankApp7处鼠标右键——添加——新建项——应用程序配置文件,App.config
2、新建Prism Module(WPF)项目:ModuleA
3、ModuleA中有个ModuleAModule.cs文件,实现ViewA与主窗体的ContentRegion的关联
using ModuleA.Views; using Prism.Ioc; using Prism.Modularity; using Prism.Regions; namespace ModuleA { public class ModuleAModule : IModule { public void OnInitialized(IContainerProvider containerProvider) { var regionManager = containerProvider.Resolve<IRegionManager>(); regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); //viewA与ContentRegion进行关联 } public void RegisterTypes(IContainerRegistry containerRegistry) { } } }
App.xaml.cs目录创建于配置文件
using BlankApp7.Views; using Prism.Ioc; using Prism.Modularity; using System.Windows; namespace BlankApp7 { public partial class App { protected override Window CreateShell() { return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { } protected override IModuleCatalog CreateModuleCatalog() { return new ConfigurationModuleCatalog(); //目录创建于配置文件 } } }
配置文件App.config,可知有一个名为ModuleAModule的Module,集合于ModuleA.dll中,startupLoaded是否在启动时就加载(显示)。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf" /> </configSections> <modules> <module assemblyFile="ModuleA.dll" moduleType="ModuleA.ModuleAModule, ModuleA" moduleName="ModuleAModule" startupLoaded="True" /> </modules> </configuration>
4、由于BlankApp7要加载ModuleA,所以要引用ModuleA生成的dll。
ModuleA处鼠标右键——生成,ModuleA的bin文件夹中就会出现ModuleA.dll
BlankApp7处鼠标右键——添加——引用,浏览,找到ModuleA.dll(不建议复制粘贴dll到BlankApp7的bin目录,因为如果重新生成ModuleA.dll,那么新的dll不会出现在BlankApp7的bin目录,依旧是拷贝的旧dll)
运行结果如图