这篇快速入门文章包括如何使用Prism进行编码、探索和创建模块的示例
创建模块:
模块是实现了IModule接口的类,
可以通过声明特性来给模块命名、控制其初始化、定义依赖等
注册模块:
模块可以通过以下方式注册:
直接使用代码:
可以直接使用代码把模块注册到模块目录
这样你就可以咱找业务逻辑来决定哪些模块需要注册到系统中来
在代码中注册的模块需要引用到系统中来,不能在运行时动态加载
使用配置文件:
Prism支持通过加载一个配置文件来注册模块
这与在Silverlight中使用XAML方法注册模块的场景非常类似
在配置文件中声明模块可以让系统决定什么时候加载和初始化模块
通过监视目录
可以指定一个目录,
如果有程序集被添加到此目录中,
系统将自动发现程序集内的模块。
注册模块依赖:
模块可以依赖于其他模块,
Prism支持管理依赖。
包括控制循环引用和重复模块检测等功能。
初始化化模块:
prism支持两种初始化模块的方式:
在可用的时候初始化:
模块可以在其可用的时候即马上被初始化,
模块在应用程序启动的时候被下载,
当模块在后台线程中下载完毕后马上就被初始化了。
在需要的时候初始化:
模块可以在系统代码调用它的时候再进行初始化,
当系统代码调用模块的时候,后台线程开始下载模块
当模块下载成功后马上初始化
在后台下载模块
尽管对于silverlight应用程序来说在后台下载模块是非常有用
桌面应用程序现在也可以利用这个改进来发现和加载程序集
显示进度:
应用程序可以订阅一个“进度改变”事件
以展示下载的byte数量和下载进度百分比,
下载完成行为:
程序可以订阅一个加载“模块完成”事件,
以处理模块加载和初始化完成后的额外事件
使用不同的依赖注入容器
一般在“快速入门”的示例中都是使用Unity依赖注入容器
虽然核心类库的代码仍然“容器-未知”(container-agnostic)
但却使用了.Net4的MEF依赖注入容器插件。
这里有两个使用不同依赖注入容器的快速入门示例
MEF模块化:
此模块化快速入门示例使用MEF倚赖注入容器
Prism推荐使用MEF的声明式特性
使ModuleCatalog和MEF的ComposablePartsCatalog成为一体
Unity模块化:
此模块化快速入门示例使用Unity倚赖注入容器
场景
这一小节描述两个快速入门示例的相同场景,
每个快速入门示例都由六个模块组成
ModuleA、ModuleB、ModuleC、ModuleD、ModuleE、ModuleF
这些模块示例展示了模块是怎么被发现、下载和初始化的
模块 | 注册方式 | 初始化方式 | 下载方式 | 依赖 |
---|---|---|---|---|
A | 代码 | 直接 | 随程序集 | D |
B | 目录 | 按需 | 后台 | |
C | 代码 | 按需 | 随程序集 | |
D | 目录 | 直接 | 后台 | |
E | 配置 | 按需 | 后台 | |
F | 配置 | 按需 | 后台 | E |
每个示例中所有的模块都是一个控件
这些控件展示了以下信息:
是否已经被初始化、下载进度、按需加载的控件可以在点击事件中初始化
这些控件还提供了一个tooltip
以显示它现在的初始化状态和被发现的信息
在快速入门示例的最下面
有一个TextBox控件
在这里展示从程序创建开始到模块加载过程中的日志记录
下图为使用模块化MEF快速入门示例的主页
模块化快速入门示例的用户界面(桌面版本)
----------------------------------------------------------------
原文是个PDF中的一部分
在这里下载的
http://mef.codeplex.com/