1.Prism

Prism是由微软Patterns & Practices团队开发的针对WPF和Silverlight的MVVM框架。

Prism的几个关键点:

(1)启动器类UnityBootstrapper

Silverlight程序入口处调用Bootstrapper.Run方法时,Prism会自动做一些初始化工作,包括读取模块信息表,创建模块类实例并初始化(还可以选择按需加载模式OnDemand),以及在CreatShell中指定整个程序的根视图。

(2)继承IModule接口,进行模块初始化工作。

构造函数中传入UnityContainer容器(使用了IoC容器Unity),即可获得容器对象,后面需要大量使用UnityContainer对象的Resolve方法来获取指定对象关联的对象,即直接使用容器对象container来获取实例或方法。

然后在Initialize中做一些模块相关的初始化工作,比如监听事件消息,当载入本模块时,界面需要做一些什么工作等等。

(3)UI管理RegionManager

之前在模块初始化时说到界面需要做一些初始化工作,使用Prism框架,可以很方便的进行UI控件的切换导航。

在模块初始化的时候将需要用到的页面进行注册,当需要加载的时候就可以直接将页面加载到指定的区域。

下图即是在模块初始化时注册了某一个页面“XXXMainView”,当监听到加载页面的事件时,就可以将其加载到之前设计好的页面区域“Page Region”。

(4)事件聚合服务EventAggregator

Prism提供了事件聚合服务EventAggregator,使用起来比委托事件更方便,注册事件,然后直接发布订阅即可,模块之间的通信中将大量用到。

2.IoC容器Unity

IoC即Inversion of Contro控制反转,将代码的控制权交由系统控制,比如对象的创建、方法的调用都交给Unity进行控制,Unity也是由微软patterns& practices团队用C#实现的轻量级、可扩展的依赖注入容器,这样做的好处是消除模块间的直接依赖,面向抽象即使面向接口编程,方便程序的扩展维护。

使用UnityContainer的容器对象,即图中的m_Container、container,将对象与对象之间的关系进行注册后(IDataService与XXXDataService),就可以在整个程序任意地方再通过容器对象解析出该注册对象,进而执行该注册对象的属性或方法,

这也是除了事件聚合服务EventAggregator外,模块之间进行通信的另一办法。

3.使用Prism及IoC的好处

(1) 功能模块化,将系统划分为多个独立模块,方便多人协同开发;

(2)有效减少程序大小,模块化开发方式加上IoC,面向接口编程,模块各司其职,使得模块重复引用类库情况大为减少,编译出来的程序更小,对于Silverlight这种富客户端,提高了加载速度。

(3)层次逻辑更加清晰,便于开发;

(4)模块之间低耦合,当模块没有更新时,可以unload,不需要重新编译,大幅减少编译时间。

(5)增强扩展维护性。

所以系统有一定复杂程度后,非Demo或原型系统时,采用Prism以及IoC会是一个很好的选择。

Silverlight项目笔记4:初识Prism以及IoC的更多相关文章

  1. Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

    最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...

  2. Silverlight项目笔记8:层次布局、客户端读取shp、ExecuteCountAsync、柱状图、url传参

    1.层次布局 由于地图窗口和菜单栏都在一个父容器内,在浏览器缩小到一定程度点击地图弹出infoWindow时,会出现菜单栏遮挡infoWindow中间部分的现象,于是通过设置Canvas.ZIndex ...

  3. Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

    1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...

  4. Silverlight项目笔记5:Oracle归档模式引起的异常&&表格控件绑定按钮

    1.Oracle归档模式产生日志文件引起数据库异常 连接数据库失败,提示监听错误,各种检查监听配置文件,删除再添加监听,无果. sqlplus下重启数据库数据库依然无果,期间碰到多个错误提示: ORA ...

  5. Silverlight项目笔记3:Silverlight RIA Services缓存引发的问题

     问题描述:使用Silverlight的RIA Services进行数据库更新操作,重复提交时发现异常,SubmitOperation发生错误,提示实体类冲突,检查发现之前删除的数据竟然还存在(数据库 ...

  6. Silverlight项目笔记6:Linq求差集、交集&检查网络连接状态&重载构造函数复用窗口

    1.使用Linq求差集.交集 使用场景: 需要从数据中心获得用户数据,并以此为标准,同步系统的用户信息,对系统中多余的用户进行删除操作,缺失的用户进行添加操作,对信息更新了的用户进行编辑操作更新. 所 ...

  7. Silverlight项目笔记2:.svc处理程序映射缺失导致的WCF RIA Services异常

    在确定代码.编译结果和数据库都正常的情况下,无法从数据库取到数据.错误提示:Sysyem.Net.WebException:远程服务器返回了错误:NotFound,监听发现请求数据库的服务异常,访问相 ...

  8. ArcGIS API for Silverlight学习笔记

    ArcGIS API for Silverlight学习笔记(一):为什么要用Silverlight API(转) 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我都 ...

  9. 《BI项目笔记》——微软BI项目笔记连载

    本系列文章主要是结合实际项目,加上自己的总结,整理出来的一系列项目笔记,涉及微软SQL Server2008中商务智能开发中的SSAS.SSIS模块:  准备工作: <BI项目笔记>基于雪 ...

随机推荐

  1. Windows7 x64 系统下安装 Nodejs 并在 WebStorm 9.0.1 下搭建编译 LESS 环境

    1. 打开Nodejs官网http://www.nodejs.org/,点“DOWNLOADS”,点64-bit下载“node-v0.10.33-x64.msi”. 2. 下载好后,双击“node-v ...

  2. [python]pythonic的字典常用操作

    注意:dct代表字典,key代表键值 1.判断字典中某个键是否存在 实现 dct.has_key(key) #False 更Pythonic方法 key in dct #False 2.获取字典中的值 ...

  3. log4j的一些问题

    今天,在学习log4j的时候发现了一点问题,关于level的问题. log4j.rootLogger=error, console, file , fileerror log4j.logger.com ...

  4. 关于 getWriter() has already been called for this response 的错误解决办法

    java.lang.IllegalStateException: getWriter() has already been called for this response 今天在做显示图片的时候,( ...

  5. 面向对象的Javascript(5):继承

    在小项目中对于JavaScript使用,只要写几个function就行了.但在大型项目中,尤其是在开发追求 良好的用户体验的网站中,如SNS,就会 用到大量的JavaScrpt,有时JavaScrip ...

  6. Weex中文文档

    这里整理当前已译出的Weex中文文档,如需查阅完整Weex文档,请访问http://alibaba.github.io/weex/doc/ . 同时也欢迎大家参与Weex中文文档翻译 [Guide] ...

  7. 使用Windows PE的U盘安装win7

    前年刚去公司的时候用PE装过好多系统,最近又装一台华硕的,碰到了一个问题,一起记录了下. 华硕X45,Bios已经改为U盘启动了,但就是进不去,因为知道可能还有个选磁盘启动项的键,找了半天原来按Esc ...

  8. TreeBuilder科学的树创建器

    public static class TreeBuilder { public static List<dynamic> Build(IEnumerable<dynamic> ...

  9. RSA密钥——JAVA与C#的区别和联系

    PS:好久没写博了,最近在考虑以后的事情,而且手上杂事也比较多,终于得空来写两篇.   首先感谢:http://www.codeproject.com/Articles/25487/Cryptogra ...

  10. 1. windows环境安装Node.js

    1. 下载 地址: https://nodejs.org/en/ 2. 下载最新版本v6.1.0 Currrent