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

这篇快速入门文章包括如何使用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快速入门示例的主页

模块化快速入门示例的用户界面(桌面版本)

image

----------------------------------------------------------------

原文是个PDF中的一部分

在这里下载的

http://mef.codeplex.com/

您的推荐是我把这个系列写完的动力~

WPF应用程序框架(WAF)v2.5.0.7源码 源码描述: WPF应用程序框架(WAF)是一个轻量级的框架,可以帮助您创建结构良好的WPF应用程序。 它支持你在申请一个分层的架构和模型-视图-ViewModel(又名MVVM, M-V-VM, PresentationModel)模式。 特点 WPF应用程序框架(WAF) ViewModel的:包含类型,帮助你实现的Model-View-ViewModel模式。 DataModel的:基类的应用,支持你的DataModel-View - ViewModel模式。 DelegateCommand:DelegateCommand允许你来处理视图比其他类别的WPF命令。 INotifyPropertyChanged的:基类实现INotifyPropertyChanged接口。实施检查中的属性名称的DEBUG模式。 WeakEvent:第一类支持的WPF WeakEvent模式,它可以帮助你避免内存泄漏。 验证:DataErrorInfoSupport类带来的IDataErrorInfo接口与DataAnnotations的验证框架。 ConverterCollection:这个集合是能够保持同步模型的ObservableCollection DataModels。 服务:显示一条消息或打开/保存文件对话框,向用户提供服务。 最近的文件:RecentFileList类提供了最近的文件列表,可以装载和存储在应用程序设置的逻辑。 单元测试扩展 例如:如果一个action结果在一个特殊的exception,可以用ExpectedException方法来测试。 PropertyChanged:提供了一个辅助方法来测试如果一个属性改变事件是当一个特定的行动提出被执行。 CanExecuteChangedEvent:一个helper方法来测试一个CanExecute改变事件是当一个特定的行动提出被执行。 v2507更新信息 图例: [b]打破变化; [O]标记为过时成员 WAF的:添加CollectionHelper.GetNextElementOrDefault方法。 InfoMan:支持创建一个新的电子邮件,并保存在发送框中。 InfoMan:新的电子邮件:选择从地址簿中的电子邮件地址。 InfoMan:显示在导航窗格中的项目数。 InfoMan:支持删除的电子邮件。 InfoMan:加入在Common.Presentation搜索盒的控制和使用,在EmailCli??ent通讯录模块。 InfoMan:设计数据添加到通讯录意见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值