【翻译】WPF应用程序模块化开发快速入门(使用Prism框架)【上】

2022-05-09 12:32:23 浏览数 (1)

这篇快速入门文章包括如何使用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/

0 人点赞