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. Windows Phone后台音乐播放本地代理实现讨论

    前一篇文章讨论的wp平台音乐播放的一些遇到的问题,经过苦思冥想和多方参考安卓实现:发现我们可以考虑一种本地代理的思想来完成我们的边听边存,并且流畅拖动进度条.希望大家一起讨论.可以下载我的代码一同研究 ...

  2. Network - Nmap

    wiki - Nmap Nmap - homepage Nmap参考指南(Man Page) Nmap中文网 常用示例 1) Ping扫描,打印出对扫描做出响应的主机: nmap -sP 192.16 ...

  3. 时尚前沿:15个创意的 3D 字体设计艺术作品欣赏

    在这里,我们为大家呈现30个创意的3D版式设计,注意每个设计中字体,颜色,款式的使用,让您享受并得到他们的灵感. 版式设计是一个美丽的艺术形式.无论是粗体还是细体,用不同的字体或使用拟物化技术操纵文本 ...

  4. LeetCode——Jump Game

    Description: Given an array of non-negative integers, you are initially positioned at the first inde ...

  5. 检测局域网中还可用的ip地址

    #!/bin/bash ` do { .$i &>/dev/null ];then echo "192.168.1.$i is not used" fi } done

  6. SpringMVC核心——返回值问题

    一.SpringMVC 使用 ModelAndView 来处理返回值问题. 1.ModelAndView 官方描述: Holder for both Model and View in the web ...

  7. 【助教】Java获取数据库数据展示

    本文将给出一个最简单的Java查询数据库中一张表的数据并将查询结果展示在页面的例子. 实际上,我们要解决以下两个问题: Java与数据库交互(以JDBC为例) 数据展示在前台页面(以Servlet+J ...

  8. MyBatis动态SQL使用,传入参数Map中的Key判断

    <select id="" parameterType="Map" resultMap="commodityResultMap" &g ...

  9. SQL增删查改注意的事项

    一.新增 1.增加的时候,bit字段要用“0,1”表示false,和true: 2.时间字段,用单引号包括,里面要遵循基本时间格式: 3,不能为标识列(自动编号列)插入数据(特殊情况下:set ide ...

  10. 基于KV Data Model实现Table Data Model

    HBase对外暴露出来的是一个表格数据模型,如下图所示 rowkey应用程序可以自己设计.每一个Cell可以保存多个版本的数据,由timestamp标示版本.应用程序可以自己指定timestamp,如 ...