zoukankan      html  css  js  c++  java
  • 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)【中】

    索引

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

    编译并运行快速入门

    需要在VisualStudio 2010上运行此快速入门示例

    代码下载:ModularityWithMef.zip

    先重新生成解决方案

    再按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

    可以在程序集->属性->生成事件中查看修改这些命令行

    image

    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

    image

    程序启动的时候,通过监视目录,

    发现了ModuleD,就把它初始化了。

    当模块A可用的时候才可被加载

    模块A依赖于模块D

    当模块D加载之后,模块A才被初始化

    窗口下部的跟踪区域显示了模块初始化的信息

    注意:

    如果没有依赖关系的话,模块的加载是无顺序的。

    2.

    鼠标移动到模块A控件上,显示了一个描述性提示,如下图:

    image

    3.

    提示信息为:

    当前控件的状态,是否被发现,

    是否被初始化,下载时间和依赖性等信息

    4.

    点击模块B和模块C

    两个模块的初始化信息都会随之改变

    点击这两个模块会触发这两个模块的加载事件

    image

    系统通过监视文件夹发现模块B

    模块C是被直接引用到系统中的

    这两个模块都是在需要的时候才被加载的

    5.

    当点击模块F的时候,

    模块E和模块F被加载。如下图

    image

    虽然模块F先被点击

    但是由于依赖关系的原因

    系统先初始化模块E,再初始化模块F

  • 相关阅读:
    一个很好用的linux下系统清理工具
    怎样将linux+qt在1S中内启动的幻灯片教程
    通过 ulimit 改善系统性能
    UBI文件系统
    利用BLCR加快Android的启动过程
    工作队列中的sleep导致控制台无法输入问题
    android system setup and building (3)
    物理地址和虚拟地址1 (MMU)
    对 makefile 中 eval 函数的学习体会
    location.href语句与火狐不兼容的问题
  • 原文地址:https://www.cnblogs.com/liulun/p/2405940.html
Copyright © 2011-2022 走看看