博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从PRISM开始学WPF(四)Prism-Module?
阅读量:6404 次
发布时间:2019-06-23

本文共 2089 字,大约阅读时间需要 6 分钟。

原文:

0x4Modules

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引用了

Directory

这个很尴尬,我调试一直不通过,辣鸡(●'◡'●)

LoadManual

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/

你可能感兴趣的文章
大数据量数据库的简单备份迁移数据技巧
查看>>
JAVA程序员面试总结,高手整理加强版
查看>>
透视学理论(二)
查看>>
Dubbo/HSF在Service Mesh下的思考和方案
查看>>
Django form表单
查看>>
CTYL-9.14(tomcat端口与阿里云安全组,域名与tomcat配置,域名与反向代理)
查看>>
古风男孩美名推荐分享
查看>>
Hadoop的命令
查看>>
Android 7.0 PopupWindow显示错位问题
查看>>
源码编译安装PHP5、PHP7
查看>>
Java 多线程相关问题记录
查看>>
LNMP架构介绍、MySQL安装、PHP安装、 Nginx介绍
查看>>
es6 class 笔记
查看>>
使用 MaxCompute(原ODPS) java sdk 运行安全相关命令
查看>>
简单的Spark+Mysql整合开发
查看>>
web.xml里的errorpage的用法
查看>>
阿里java面试经验大汇总(附阿里职位需求)
查看>>
Python全套零基础视频教程+软件2018最新编程视频!
查看>>
内存管理之1:x86段式内存管理与保护模式
查看>>
Java的GC与内存分配策略
查看>>