本文共 2089 字,大约阅读时间需要 6 分钟。
Modules是能够独立开发、测试、部署的功能单元,Modules可以被设计成实现特定业务逻辑的模块(如Profile Management),也可以被设计成实现通用基础设施或服务的模块(如Logging、Exception Management)。
既然Modules能够独立开发、测试、部署,那么如何告诉Shell(我们的宿主程序)去Load哪些Module,以怎样的形式Load这些Module呢?Prism为此提供了一个叫ModuleCatalog的东西。他用这个来管理Module。所以在App启动之初,需要创建配置一个ModuleCatalog。
: 先新增一个WpfApp项目,命名ModuleA,删除App.config和App.xaml,然后将outputType改为Class Library。在Views文件夹下面新建一个用户控件ViewA
新增一个类ModuleAModule.cs
实现IModule接口(每一个Module类都要实现这个接口,而每一个Module都要有这样一个类来对Module里的资源统一管理)
using ModuleA.Views;using Prism.Modularity;using Prism.Regions;namespace ModuleA{ public class ModuleAModule : IModule { IRegionManager _regionManager; public ModuleAModule(RegionManager regionManager) { _regionManager = regionManager; } public void Initialize() { _regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); } }}
他通过View Discovery的方式,将ModuleA的ViewA与_regionManager(这里是依赖注入)的Region"ContentRegion"进行关联。
那么,ModuleCatalog是怎样让Shell加载ModuleA的呢?,,ԾㅂԾ,,
先在shell所在module添加ModuleA引用,然后:
Bootstrapper.cs
中重写ConfigureModuleCatalog
:
protected override void ConfigureModuleCatalog() { var catalog = (ModuleCatalog)ModuleCatalog; catalog.AddModule(typeof(ModuleAModule)); }
啊妹子,炒鸡简单有没有?
Bootstrapper.cs
中重写CreateModuleCatalog
:
protected override IModuleCatalog CreateModuleCatalog() { return new ConfigurationModuleCatalog(); }
这表示,ModuleCatalog将从配置文件中创建。
App.config中添加了
通过配置文件来配置ModuleCatalog就不需要添加ModuleA引用了
这个很尴尬,我调试一直不通过,辣鸡(●'◡'●)
Bootstrapper.cs
中重写ConfigureModuleCatalog
:
protected override void ConfigureModuleCatalog() { var moduleAType = typeof(ModuleAModule); ModuleCatalog.AddModule(new ModuleInfo() { ModuleName = moduleAType.Name, ModuleType = moduleAType.AssemblyQualifiedName, InitializationMode = InitializationMode.OnDemand }); }
转载地址:http://jrnea.baihongyu.com/