Microsoft Prism安装使用教程 搭建WPF松耦合架构框架

Prism是由微软Patterns & Practices团队开发的项目,目的在于帮助开发人员构建松散耦合的、更灵活、更易于维护并且更易于测试的WPF应用或是Silverlight应用以及Windows Phone 7应用。使用Prism可以使程序开发更趋于模块化,整个项目将由多个离散的、松耦合的模块组成,而各个模块又可以又不同的开发者或团队进行开发、测试和部署。目前Prism的最新版本是Prism 4,于2010年11月12日发布。Prism有很完整的文档以及丰富的示例程序。在这里我们仅针对于Silverlight程序的开发。

下载Prism安装包并安装完成后,会在目标文件夹中发现很多文件。

推荐首先运行RegisterPrismBinaries.bat文件,这样在开发基于Prism的程序时可以更方便地添加引用程序集。

使用Prism之前,需要了解一些概念,下面通过一个非常简单的小程序来了解一下Prism。

1.打开Visual Studio 2010,新建一个Silverlight Application项目,并添加对Prism的引用。再创建三个Silverlight类库工程。

2.在Contract工程下新建一个接口,叫做ITextProvider。 public interface ITextProvider {     string GetText(); } 3.在其它的三个项目中都引用Contract项目。

4.在PrismStarter工程下新建一个TextProvider类并实现ITextProvider接口。 public class TextProvider : ITextProvider {     private int i = 0;       public string GetText()     {         i++;         return string.Format("From TextProvider [{0}]", i);     } } 5.删除PrismStarter项目中自动生成的MainPage.xaml,创建一个新的UserControl,叫做Shell。页面代码如下:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     xmlns:prism="http://www.codeplex.com/prism"     mc:Ignorable="d"     d:DesignHeight="300" d:DesignWidth="400">
6.在ModuleA工程中添加对Prism程序集的引用。并添加一个UserControl叫做ViewA,页面代码为:

CodeBehind中的代码为:

public partial class ViewA : UserControl {     public ViewA(ITextProvider textProvider)     {         InitializeComponent();

this.Loaded += (s, e) =>             {                 textModuleA.Text = string.Format("Module A {0}", textProvider.GetText());             };     } } 7.在ModuleA工程中添加一个类叫做ModuleA,并实现接口IModule。

public class ModuleA : IModule {     private IRegionManager _regionManager;

public ModuleA(IRegionManager regionManager)     {         _regionManager = regionManager;     }

public void Initialize()     {         _regionManager.RegisterViewWithRegion("RegionA", typeof(ViewA));     } } 注意这里的RegionA对应于Shell页面中的RegionName。

8.在ModuleB工程中重复6、7过程,只是将A替换为B。

9.在PrismStarter工程中添加对ModuleA和ModuleB的引用。

10.在PrismStarter工程中添加一个PrismStarterBootstrapper类,并继承UnityBootstrapper。

public class PrismStarterBootstrapper : UnityBootstrapper {     protected override DependencyObject CreateShell()     {         return this.Container.TryResolve();     }

protected override void InitializeShell()     {   //  控制页面在初始化时显示Shell页面         App.Current.RootVisual = (UIElement)this.Shell;     }

protected override void ConfigureModuleCatalog()     {   //  注册Module。在实际开发中可以使用xaml做配置文件,         //  这样就可以将PrismStarter与ModuleA和ModuleB完全解耦,也就不再需要引用这两个项目         Type moduleAType = typeof(ModuleA.ModuleA);         ModuleInfo moduleA = new ModuleInfo         {             ModuleName = moduleAType.Name,             ModuleType = moduleAType.AssemblyQualifiedName,         };

Type moduleBType = typeof(ModuleB.ModuleB);         ModuleInfo moduleB = new ModuleInfo         {             ModuleName = moduleBType.Name,             ModuleType = moduleBType.AssemblyQualifiedName,         };

this.ModuleCatalog.AddModule(moduleA);         this.ModuleCatalog.AddModule(moduleB);     }

protected override void ConfigureContainer()     {   //  注册一下TextProvider,这样在通过容器请求ITextProvider时会返回TextProvider实例         base.ConfigureContainer();         this.Container.RegisterInstance(new TextProvider());     } } 11.最后一步,打开App.xaml.cs,修改Application_Startup方法

private void Application_Startup(object sender, StartupEventArgs e) {     PrismStarterBootstrapper bootstrapper = new PrismStarterBootstrapper();     bootstrapper.Run(); } 运行程序,结果如下:

下面简单介绍一下这个小例子中涉及到的一些概念。

Bootstrapper: 在程序中使用框架需要找到一个切入点,将框架植入进去,将一部分功能委托给框架来实现。在Silverlight中使用Prism的切入点就是App.xaml.cs中的Application_Startup方法。一般来说,这个方法中只是指定页面最先加载的页面,但是我们把默认的逻辑去掉,取而代之的是Bootstrapper(在本例中就是PrismStarterBootstrapper)。当调用Bootstrapper.Run方法时,它会完成一些准备工作,如一些配置等。因此你会发现,使用Prism后,启动程序时会比正常启动要慢一些,就是因为Bootstrapper做了许多工作。

Container: 依赖注入容器。在程序中使用依赖注入的好处到处都可以找的到。在Silverlight中使用容器来管理各个组件的一个很明显的好处就是使用单例来降低内存使用。否则每次加载一个页面都需要重新创建一个也很耗费资源的。当然好处不只这些,通过容器来注入一些服务(如本例中的IRegionManager和ITextProvider)显得相当方便。

Module: Prism帮助我们把程序分解成一个个功能模块,这些功能模块就叫做Module,通常一个工程就是一个Module。由于Module彼此是独立的,但是在运行时需要将它们整合到一起,因此Prism需要知道Module的存在,这里就涉及到了ModuleCatalog, ModuleCatalog就是Module的容器,里面包含了所有Module的信息,以ModuleInfo的形式存在。ModuleInfo就是对Module的抽象,包含Module的名字,类型,依赖等一些信息。

Shell: 相当于程序的入口,初始界面,还能够提供类似ASP.Net中的母版页的功能。Shell必须由Bootstrapper创建,因为Shell需要使用的一些service,比如RegionManager等,需要在Shell显示前注册。

Region: 相当于ASP.Net中的ContentPlaceHolder(是这么叫的吧?),起到占位符的作用,如本例中Shell中有两个Region——RegionA和RegionB,定义了两块区域。在Module的初始化过程中,通过IRegionManager将Module中的页面放进了定义好的Region中。IRegionManager负责管理Region,可以通过它向Region中注册View,进行导航等。

Prism的功能当然远不止这么简单,它还提供对MVVM模式的支持,对导航的支持等,在后续文章中会逐步介绍。希望能够通过本文让大家对Prism有一定的了解。

时间: 2024-10-29 04:03:34

Microsoft Prism安装使用教程 搭建WPF松耦合架构框架的相关文章

Wix 安装部署教程(十) --来,用WPF做个漂亮的安装界面

在上一篇中曾留下两个问题,.Net捆绑安装不触发以及路径选择的问题现在都已经解决,这段时间花的最多的地方还是WPF调样式上面,奈何WPF功力不够,暂时还是没有达到自己想要的效果.另外ViewModel做了些调整,状态更加分明.安装效果是仿照搜狗输入法做的.先上效果图.   以上这只是四个基本的页面,更细化一些可以分出卸载的进度页面,卸载的完成页面,对修复同理,还有安装失败,用户取消提示页面,再就是能检测新版本并覆盖安装,这些都可以根据状态去添加页面.下面简单的说下思路和新的问题点. 关键流程 安

Prism 4 文档 ---第9章 松耦合组件之间通信

当构建一个大而负责的应用程序时,通用的做法时将功能拆分到离散的模块程序集中.将模块之间的静态引用最小化.这使得模块可以被独立的开发,测试,部署和升级,以及它迫使松散耦合的沟通. 当在模块之间通信时,你需要知道不同通信方式之间的区别,那样你才能确定哪种方式对于你的特定的场景最合适,Prism类库提供了以下几种通信方式: 命令.当希望对于用户的交互马上采取动作时使用. 事件聚合.用于ViewModel,展现层,或者控制之间没有所期望的直接动作时. 区域上下文.使用它可以提供宿主和宿主区域的View之

MySQL基础环境_安装配置教程(Windows7 64或Centos7.2 64、MySQL5.7)

MySQL基础环境_安装配置教程(Windows7 64或Centos7.2 64.MySQL5.7) 安装包版本 1)     VMawre-workstation版本包 地址: https://my.vmware.com/web/vmware/details?downloadGroup=WKST-1411-WIN&productId=686&rPId=20814 包名:VMware-workstation-full-12.5.7.20721.exe 2)     Windows版本包

64位Windows下安装Redis教程

这篇文章主要介绍了64位Windows下安装Redis教程,本文使用Microsoft Open Tech group 在 GitHub上开发的一个Win64版本的Redis,需要的朋友可以参考下 Redis对于Linux是官方支持的,安装和使用没有什么好说的,普通使用按照官方指导,5分钟以内就能搞定.详情请参考:http://redis.io/download 但有时候又想在windows下折腾下Redis,可以从redis下载页面看到如下提示: 复制代码 代码如下: Win64 Unoffi

GNS3-1.4 加 vm-iou 安装配置教程

GNS3-1.4 加 vm-iou 安装配置教程      下载地址 http://down.51cto.com/data/2151906 作者:赵明.李震 1.教程意义 对于网络工程师来说,敲实验室是日常娱乐的一种方式.工欲善其事必先利其器,gns3 和 iou.vm 我就不介绍了,之前的 gns3 版本对于交换机的实验模拟存在不足,比如 mst 就无 法配置:虽然 iou 可以解决该问题,但是 iou 本身可视化较差,安装配置复杂,拓扑搭建麻 烦.故今天给大家分享下,使用最新版的 gns3-

WIX 安装部署教程(六) 为你收集的七个知识点

前段时间整理5篇WIX(Windows Installer XML)的安装教程,但还不够完善,这里继续整理了七个知识点分享给大家.WIX最新版本3.8,点击下载 WIX安装部署(一)同MSBuild自动生成打包文件 WIX安装部署(二)自定义安装界面和行为 WIX安装部署(三)自定义安装界面和行为 WIX安装部署(四)添加安装文件及快捷方式 WIX安装部署(五)Bootstrap 捆绑安装 1.设置路径变量 有的时候路径过长,文件又比较多,重复粘贴一个地址总是不舒服,而且要改起来也很麻烦,那这个

基于BitNami for XAMPP进行Drupal7安装的教程(Win7平台)

BitNami是一个开源项目,该项目产生的开源软件包可用于安装Web应用程序和解决方案堆栈,以及虚拟设备.BitNami 提供wordpress.joomla.drupal.bbpress等开源程序的傻瓜式安装包下载,所有的安装包内置了服务器环境,就是说,不需要在本地 电脑上另外搭建服务器,就可以一次性傻瓜式安装完毕.BitNami的目的是为了简化部署Web应用程序,如wiki或博客,以使他们更容易. Bitnami for XAMPP下载地址:Bitnami for XAMPP 在这个站点有很

UCenter 1.5.0 安装图文教程

本教程讲解的是如何全新安装 UCenter 1.5.0. 在安装 UCenter Home.Discuz!.SupeSite.X-Space 等应用的时首先必须先安装 UCenter.目前 UCenter 提供两种挂接方式:MySQL 和 fopen,支持同一台服务器和不同服务器之间的应用挂接,这个是在产品安装过程中由程序自动选择. 一.所需环境要求 操作系统要求 UCenter 具备跨平台特性,可以运行于 UNIX/Linux/FreeBSD 及微软 Windows 等各种操作系统环境下.我们

hg+rhodecode 安装配置教程

  Hg+Rhodecode安装配置教程 公司最近需要搭建hg+rhodecode,于是下来了解了下: 1) rhodecode官网: http://rhodecode.com/ rhodecode 官方文档: https://docs.rhodecode.com/RhodeCode-Enterprise/ rhodecode介绍: http://www.oschina.net/p/rhodecode svn,git,hg比较: http://www.cnblogs.com/likebeta/a