【翻译】WPF应用程序模块化开发快速入门(使用Prism框架)【上】
2012-03-16 08:15
1481 查看
这篇快速入门文章包括如何使用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
这些模块示例展示了模块是怎么被发现、下载和初始化的
每个示例中所有的模块都是一个控件
这些控件展示了以下信息:
是否已经被初始化、下载进度、按需加载的控件可以在点击事件中初始化
这些控件还提供了一个tooltip
以显示它现在的初始化状态和被发现的信息
在快速入门示例的最下面
有一个TextBox控件
在这里展示从程序创建开始到模块加载过程中的日志记录
下图为使用模块化MEF快速入门示例的主页
模块化快速入门示例的用户界面(桌面版本)
----------------------------------------------------------------
原文是个PDF中的一部分
在这里下载的
http://mef.codeplex.com/
您的推荐是我把这个系列写完的动力~
创建模块:
模块是实现了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/
您的推荐是我把这个系列写完的动力~
相关文章推荐
- 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)
- 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)【中】
- 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)【下】
- 使用android快速开发框架afinal 开发android应用程序
- .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
- [翻译]ADO.NET Entity Framework Beta2(七)/快速入门(实体框架)(2)/创建ClassSchedule窗体应用程序
- WPF PRISM开发入门二(Unity依赖注入容器使用)
- .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
- NHibernate的基本使用、快速入门 - Microsoft.NET开发框架应用资源(zhuan)
- Java开发框架Play框架快速入门
- 使用Grails快速开发应用程序(2)
- 使用ASP.NET 构建 Web 应用程序快速入门-8小时的免费培训视频
- 使用jQuery简化Ajax开发——Ajax开发入门[令狐葱翻译版part1]
- Sencha Touch入门:Sencha Touch开发环境搭建及使用 Sencha Cmd 自动创建项目框架
- Android 最火的快速开发框架AndroidAnnotations使用详解
- 使用 Bootstrap 快速开发网站和 Web 应用程序
- 使用CodeIgniter框架快速开发PHP应用(五)
- Android游戏开发框架Libgdx的使用(一)--Libgdx基础入门
- ZZ:使用.NET语言开发Silverlight应用程序入门(一):了解项目结构
- ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧