【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)
编译并运行快速入门
需要在VisualStudio 2010上运行此快速入门示例
先重新生成解决方案
再按F5运行此示例
说明:
在此快速入门示例解决方案的
ModularityWithMef.Desktop程序集中
加入了生成成功时的“后期生成事件命令行”
IF NOT EXIST "$(TargetDir)\DirectoryModules"
mkdir "$(TargetDir)\DirectoryModules"
此命令含义为:
如果在此程序集的bin目录中没有DirectoryModules目录
则创建此目录
预先生成事件/后期生成事件命令行的宏请看MSDN的注释:
http://msdn.microsoft.com/zh-cn/library/aa833259(v=vs.80).aspx
可以在程序集->属性->生成事件中查看修改这些命令行

ModuleB程序集的成功生成时的“后期生成事件命令行”
xcopy "$(TargetDir)ModularityWithMef.Desktop.ModuleB.dll"
"$(SolutionDir)ModularityWithMef.Desktop\bin\$(ConfigurationName)\DirectoryModules\" /Y
含义为
把自身生成的dll复制到DirectoryModules目录下
ModuleD的程序集也有类似的命令行
另外
ModuleE和ModuleF生成的DLL会被拷贝到
ModularityWithMef.Desktop程序集的debug目录下
演练
运行程序
1.
主窗口包含六个模块
每个模块都展示了各自的初始化状态。
应用程序加载的时候
程序就发现并初始化了模块A和模块D

程序启动的时候,通过监视目录,
发现了ModuleD,就把它初始化了。
当模块A可用的时候才可被加载
模块A依赖于模块D
当模块D加载之后,模块A才被初始化
窗口下部的跟踪区域显示了模块初始化的信息
注意:
如果没有依赖关系的话,模块的加载是无顺序的。
2.
鼠标移动到模块A控件上,显示了一个描述性提示,如下图:

3.
提示信息为:
当前控件的状态,是否被发现,
是否被初始化,下载时间和依赖性等信息
4.
点击模块B和模块C
两个模块的初始化信息都会随之改变
点击这两个模块会触发这两个模块的加载事件

系统通过监视文件夹发现模块B
模块C是被直接引用到系统中的
这两个模块都是在需要的时候才被加载的
5.
当点击模块F的时候,
模块E和模块F被加载。如下图

虽然模块F先被点击
但是由于依赖关系的原因
系统先初始化模块E,再初始化模块F
【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)的更多相关文章
- WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)
概述 本文描述WPF的拖放功能(Drag and Drop). 拖放功能涉及到两个功能,一个就是拖,一个是放.拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放.假设界面上有两个控件,一个Tre ...
- HealthKit开发快速入门教程之HealthKit数据的操作
HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...
- HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID
HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...
- HealthKit开发快速入门教程之HealthKit开发概述简介
HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为“He ...
- Apple Watch开发快速入门教程
Apple Watch开发快速入门教程 试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...
- Transform组件C#游戏开发快速入门
Transform组件C#游戏开发快速入门大学霸 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选自C#游戏开发快速入门大学霸 ...
- 游戏控制杆OUYA游戏开发快速入门教程
游戏控制杆OUYA游戏开发快速入门教程 1.2.2 游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4 游戏控制杆各个角度的 ...
- SpringBoot开发快速入门
SpringBoot开发快速入门 目录 一.Spring Boot 入门 1.Spring Boot 简介 2.微服务 3.环境准备 1.maven设置: 2.IDEA设置 4.Spring Boot ...
- seaJs模块化开发简单入门
随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发 ...
随机推荐
- stm32 development
1.www.st.com st官网 2.www.stmcu.com.cn st中文网 3.www.stmcu.org.cn st中文社区
- docker_Ubuntu16.04下安装cuda
经过一上午的研究,终于配置好docker环境,并成功安装cuda9.0. (1)下载安装文件.首先去英伟达官网下载cuda安装包:https://developer.nvidia.com/cuda-t ...
- oracle监听启动很慢
TNS-12531: TNS:cannot allocate memory 首先查看内存,free -m 发现当前的空闲内存还有很多,那就不是内存不足的问题 想到之前重启过数据库服务器,查看主机名ho ...
- Linux查看所有子文件夹及文件的数量
find命令查看(推荐): 所有子目录的数量: [root@localhost ~]# find afish -type d | wc -l158[root@localhost ~]# find af ...
- Linux vim替换命令
#替换每一行的第一个a:%s/a/b/#全部替换:%s/a/b/g#替换/时需要转义"\/"
- iOS中为控件设置颜色渐变和透明度渐变
项目中用到地图设置渐变色,查找资料找到两种方法:一种设置颜色,一种设置透明度: //为颜色设置渐变效果: UIView *view = [[UIView alloc] initWithFrame:CG ...
- Spring源代码下载和导入eclipse
下载源代码包并解压,我下载的是3.2版本,下载地址在https://github.com/spring-projects/spring-framework/tree/3.2.x 因为Spring是使用 ...
- 在linux安装php
去www.php.net找下载最新的版本 http://www.php.net/downloads.php 下载解压 # wget http://cn2.php.net/distributions/ ...
- SQL中Charindex和Oracle中对应的函数Instr
转:http://blog.csdn.net/zhuyu19911016520/article/details/8568640 sql :charindex('字符串',字段)>0 charin ...
- HyperSQL 链接参数中文件的路径
如果我们在系统中配置下面的连接参数: spring.datasource.url=jdbc:hsqldb:file:~/db/cwiki-us-jpetstore 我们怎么知道 hsqldb 数据库的 ...