【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)【中】
索引
【翻译】WPF应用程序模块化开发快速入门(使用Prism框架)【上】
编译并运行快速入门
需要在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