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. [编辑器]走上atom之路1

    祝大家新年快乐 我就是来卖个萌,逃- 正文 我最开始用atom是因为它看起来比较酷,我工作中主力还是使用pycharm,毕竟atom只是一个编辑器.我一 般只是用atom来写Markdown的文件.随 ...

  2. Centos7 禁止firewalld并使用iptables 作默认防火墙

    一.停止并禁用firewalld [root@test ~]# systemctl stop firewalld [root@test ~]# systemctl disable firewalld ...

  3. 关于JQUERY操作XML问题!

    使用JQUERY操作XML方法: 1.$.get(”xml文件路径",function(data){}); 2.$.Post(”xml文件路径",function(data){}) ...

  4. MySQL忘记root用户密码修改方法

    一般来说在MySQL修改用户密码有好几种方法: 1.修改自己的密码可用: set password=password('123456'); 2.修改其它用户的密码可用: set password fo ...

  5. web api返回格式小结

    web api返回格式小结: 1.默认是返回xml格式数据,如果需要返回json格式,需要在Global.asax中加入: GlobalConfiguration.Configuration.Form ...

  6. No.011:Container With Most Water

    问题: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...

  7. ahjesus C# Flags 位域略说

    class Program { [Flags] public enum Week { [Description("星期一")] Monday = << , [Descr ...

  8. 从自签名证书导出pfx和cer证书

    完整代码: public sealed class DataCertificate { #region 生成证书 /// <summary> /// 根据指定的证书名和makecert全路 ...

  9. 将HTML5封装成android应用APK文件的几种方法(转)

    作为下一代的网页语言,HTML5拥有很多让人期待已久的新特性.HTML5的优势之一在于能够实现跨平台游戏编码移植,现在已经有很多公司在移动 设备上使用HTML5技术.随着HTML5跨平台支持的不断增强 ...

  10. jQuery eislideshow 图片轮播

    在线实例 基础演示 自动播放 使用方法 <div id="ei-slider" class="ei-slider"> <ul class=&q ...