上篇介绍了WPF的Attach Behavior(附加行为)模式以及如何在prism框架中如何使用附加行为和RegionAdapter的扩展.
这篇来介绍Prism中的很重要的一个功能模块化.
基本概念
模块化的概念类似于现在网上比较流行的Widget,如下例子
google的个性化页面
vista的sidebar
他们都有如下特性:
1.模块之间没有关联,模块之间不会相互引用
2.可插拔(可随意增删改模块)
使用prism框架,模块是基础,一个系统是由多个模块组成,一个模块可以代表一个子功能,很重要的是这样的做法可以降低开发的复杂度.下面我们来了解在prism中,模块的基本使用方法.
1.注册模块
prism定义了一个IModule接口,Initialize方法是模块初始化的入口点,好比主程序的Main的入口点.
一般情况下,每新建一个模块都会新建一个项目来完成(当然这不是必须的规定).下面是一个简单的例子
public class ModuleA : IModule { private readonly IRegionManager regionManager; public ModuleA(IRegionManager regionManager) { this.regionManager = regionManager; } public void Initialize() { this.regionManager.Regions["MainRegion"].Add(new DefaultViewA()); } }
在模块初始化的时候,可以在依赖注入容器中获取已注册的服务
加载模块的方式有三种
- 静态加载模块
- 根据目录加载模块
- 根据配置文件加载模块
加载模块现在有以下概念:
- 模块添加方法
- 模块依赖性
- 模块加载方式
2.加载模块之静态加载模块
2.1重写Bootstrapper的GetModuleCatalog方法
在Bootstrapper引导程序中重写GetModuleCatalog方法,返回一个实现IModuleCatalog的对象,静态加载模块请返回ModuleCatalog类
protected override IModuleCatalog GetModuleCatalog() { ModuleCatalog catalog = new ModuleCatalog(); catalog.AddModule(typeof (ModuleA), "ModuleD") .AddModule(typeof (ModuleB)) .AddModule(typeof (ModuleD), "ModuleB") .AddModule(typeof (ModuleC), InitializationMode.OnDemand) ; return catalog; }
2.2模块依赖(dependsOn)
AddModule方法,第一个参数是模块类型,第二个是该模块依赖的模块.如上ModuleA依赖于ModuleD,ModuleD依赖于ModuleB.所以上面的加载顺序如下.模块依赖在不同加载模块的方式都有,只不过做法不同而已
2.3加载方式(初始化加载和按需加载)
(1)初始化加载
InitializationMode决定模块是否初始化时加载,默认是WhenAvailable,OnDemand则会在请求时加载
public enum InitializationMode { /// <summary> /// The module will be initialized when it is available on application start-up. /// </summary> WhenAvailable, /// <summary> /// The module will be initialized when requested, and not automatically on application start-up. /// </summary> OnDemand }
以上配置,将会初始化ModuleA,B,C三个模块,ModuleC则不初始化.
(2)按需加载
按需加载可以减少初始化时加载模块的时间.可以在需要时使用IModuleManager接口的LoadModule方法来加载所需模块
(注意:这里虽是延迟加载,但这个模块已经进来,就是说这个模块的dll还是被加载了,只不过没初始化而已)
public DefaultViewB(IModuleManager moduleManager) : this() { this.moduleManager = moduleManager; } private void OnLoadModuleCClick(object sender, RoutedEventArgs e) { // This logic is placed in code-behind instead of a presenter // for the ease of demonstrating module loading. this.moduleManager.LoadModule("ModuleC"); }
3.加载模块之根据目录加载模块
三个步骤
3.1.把需要的模块放在某个目录下面
3.2.用Attribute配置相关模块
[Module(ModuleName = "ModuleA")] [ModuleDependency("ModuleD")] public class ModuleA : IModule { private readonly IRegionManager _regionManager; public ModuleA(IRegionManager regionManager) { _regionManager = regionManager; } public void Initialize() { _regionManager.Regions["MainRegion"].Add(new DefaultViewA()); } }
3.3.重写Bootstrapper的GetModuleCatalog方法返回DirectoryModuleCatalog,并指定模块目录.
protected override IModuleCatalog GetModuleCatalog() { return new DirectoryModuleCatalog() {ModulePath = @".\Modules"}; }
3.加载模块之根据配置文件加载模块
两个步骤
3.1.配置文件
<modules> <module assemblyFile="Modules/ModuleD.dll" moduleType="ModuleD.ModuleD, ModuleD" moduleName="ModuleD"> <dependencies> <dependency moduleName="ModuleB"/> </dependencies> </module> <module assemblyFile="Modules/ModuleB.dll" moduleType="ModuleB.ModuleB, ModuleB" moduleName="ModuleB"/> <module assemblyFile="Modules/ModuleA.dll" moduleType="ModuleA.ModuleA, ModuleA" moduleName="ModuleA"> <dependencies> <dependency moduleName="ModuleD"/> </dependencies> </module> <module assemblyFile="Modules/ModuleC.dll" moduleType="ModuleC.ModuleC, ModuleC" moduleName="ModuleC" startupLoaded="false"/> </modules>
3.2.重写Bootstrapper的GetModuleCatalog方法返回ConfigurationModuleCatalog
(注意startupLoaded属性如果设置为false,则该模块的dll不会加载,这有区别与静态加载的方式,这样的做法可以真正做到按需加载)
好,这篇就写到这里.Demo是prism内置的.
发表评论
-
wpf开发常见问题(1)
2008-10-22 21:42 1628经过一段时间wpf的学习和实际开发.现在与大家分享 ... -
初始化集合项依赖属性
2008-11-03 13:38 824在wpf自定义属性时,若此属性为集合类型的话,如 ... -
WPF and SL RadioButtonList Tip
2008-11-03 14:03 818在以下情境下.使用数据绑定分离UI与后端Model ... -
wpf datagrid笔记 part 1
2008-12-10 23:35 29311,基本属性 开关基本 ... -
Prism V2之旅(2)
2009-01-07 10:02 1200本篇将介绍Prism中Region的使用. 本篇D ... -
Prism V2之旅(3)
2009-01-07 15:24 873上篇介绍了Region的基本应用,这篇接上篇,继续介绍 ... -
Prism V2之旅(4)
2009-01-07 23:42 992上篇介绍了RegionAdapter的作用及如何如何 ... -
Prism V2之旅(6)
2009-01-13 15:14 1048这篇来讲事件.事件主要用来交互. 监听事件 我订 ... -
prism v2之旅(7)
2009-01-15 23:53 1148这篇继续介绍Module的功能. 第5篇已经介绍过模块的 ... -
XAML Guidelines
2009-01-17 11:31 876http://blogs.msdn.com/jaimer ... -
wpf中xaml的类型转换器与标记扩展
2009-02-02 14:03 2363这篇来讲wpf控件属性的类型转换器 类型转换器 类 ... -
wpf控件设计时支持(3)
2009-02-02 14:12 2782wpf设计时调试 编辑模型 装饰器 1.wpf ... -
wpf控件样式管理示意图
2009-02-04 14:40 1676...
相关推荐
1. **模块化(Modularity)**:Prism的核心特性之一是模块化,它允许将大型应用程序分解为小的、独立的模块,每个模块都有自己的功能。这样可以提高代码的可重用性,使得开发和维护变得更加容易。在示例中,你可能会...
GraphPad Prism 5.0 中文教程 GraphPad Prism 5.0 是一个功能强大的数据分析和图形化工具,它可以帮助用户快速、准确地处理和可视化数据。在本教程中,我们将详细介绍 GraphPad Prism 5.0 的使用方法和技巧,从...
3. 图形绘制:Prism5 提供了丰富的图表类型,包括散点图、条形图、箱线图、生存曲线图、热图等,用户可以根据需要定制图形样式,快速创建专业级的科研图表。 4. 模型拟合:非线性回归是GraphPad Prism的一大特色,...
首先,`Prism5ClassLibrary.chm`是官方的帮助文档,包含了关于Prism框架的详尽信息。文档中会涵盖诸如依赖注入(Dependency Injection)、模块化(Modularity)、命令(Commands)、事件聚合(EventAggregator)、...
Prism是一个流行的框架,它可以帮助开发者构建适用于.NET平台的模块化应用程序。本手册介绍的是Prism框架的官方指南,并说明了如何将Markdown文件转换成PDF格式。Prism框架主要针对WPF(Windows Presentation ...
5. **导航服务(Navigation Service)**:在MVVM架构中,Prism提供导航服务,用于在视图之间跳转,支持参数传递和历史管理。 6. **视图模型定位(ViewModel Location)**:Prism自动定位视图模型,使得视图可以方便...
Prism 的核心特性之一是模块化。模块化允许将大型应用程序分解为小的、独立的功能单元,每个单元称为模块。这样可以分别开发、测试和部署这些模块,提高代码的复用性和可维护性。文件名 "Prism-7.2.0.1422" 可能包含...
GraphPad Prism 5是一款专为科学研究设计的强大统计分析和图形绘制软件,尤其适合Windows 8 64位操作系统用户。这款软件集成了多种数据分析方法,包括但不限于线性回归、非线性回归、ANOVA、t检验、生存分析等,使得...
GraphPad Prism 5中文教程 GraphPad Prism 是一款功能强大且美观的统计学软件,能够帮助用户快速制作美观的图片。下面是 GraphPad Prism 5 的一些关键知识点: 1. GraphPad Prism 项目结构:GraphPad Prism 项目...
Prism 5 让你工作起来更加有效率。 新的工具条按钮提供获取每个功能的简易途径。不再需要搜索下拉菜单来寻找需要的功能。另外新的右键弹出菜单提供快速简单的编辑功能。而且我们增加了许多新的工具来帮助你在一个大...
WPF PRISM5.0框架源代码,适合WPF初学者或者有一定开发经验的C#程序员,包含:Microsoft.Practices.Prism、Microsoft.Practices.Prism.MefExtensions、 Microsoft.Practices.ServiceLocation
prism模板 vs插件
5. **模块化(Modularity)**:Prism 支持模块化开发,每个功能或子系统可以封装为一个独立的模块,降低复杂性,便于管理和扩展。模块可以通过程序集、嵌入式资源或单独的 DLL 文件加载。 6. **命令(Commands)**...
Graphpad Prism 5 作图操作指南 Graphpad Prism 5 是一款功能强大且易于使用的统计图形软件,对医学研究和论文发表非常有用。本指南将指导您快速制作符合 SCI 投稿要求的 8 种统计图。 1. 折线图 折线图是统计图...
This Statistics Guide is a companion to GraphPad Prism 5. Available for both Mac and Windows, Prism makes it very easy to graph and analyze scientific data. Download a free demo from www.graphpad.com
5. 视图模型到视图的绑定(ViewModel-to-View Binding):Prism支持数据绑定,使得视图模型中的属性能够自动更新视图的显示,反之亦然。 6. 附加行为(Attached Behaviors):提供了一种扩展WPF控件行为的方法,使得...
GraphPad Prism 5是一款在科学研究领域广泛使用的统计分析与图形绘制软件。这款强大的工具专为生物医学、生命科学以及社会科学的研究者设计,旨在简化数据分析和图表制作过程,使其更易于理解和解释实验结果,并且...
5. Selete the menu item "License\Import",import C:\Program Files\Embarcadero\Delphi Prism\License\PrismXe.slip 6. exit and save. OK,you can run delphi prism Xe correctly! gwl18@qq.com
Prism5框架手册。wpf开发常用手册。内附示例代码下载地址。
Graphpad Prism 5简易制作8种图 Graphpad Prism 5是一个功能强大的统计图形软件,广泛应用于SCI论文发表。以下是使用Graphpad Prism 5制作8种常见统计图的详细步骤。 一、折线图 折线图是一种常见的统计图,用于...