Silverlight项目笔记2:初识Prism以及IoC

项目采用了Prism框架,以下为自己的一些初步认识:

  一.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,使用起来比委托事件更方便,注册事件,然后直接发布订阅即可,模块之间的通信中将大量用到。

二.IoC容器Unity

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

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

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

三.使用Prism及IoC的好处

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

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

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

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

(5)增强扩展维护性。

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

Silverlight项目笔记2:初识Prism以及IoC,布布扣,bubuko.com

时间: 2024-10-25 18:55:18

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

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

最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下:   1.UI控件与布局     2.MVVM     3.数据绑定     4.await/async     5.Linq查询     6.WCF RIA Services     7.序列化     8.委托与事件 1.UI控件与布局 常用的主要是Grid.StackPanel.Border,其中最常用的的是Grid,是一

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

两个问题: (1)Oracle无法连接正常使用,原因是归档日志满了引起异常,最后选择删除归档日志恢复正常. (2)使用silverlight自带的表格绑定按钮竟然无法使用,通过变通绑定数据源集合,把按钮操作作为数据源集合一部分,重新绑定解决. 一.Oracle归档模式产生日志文件引起数据库异常 连接数据库失败,提示监听错误,各种检查监听配置文件,删除再添加监听,无果. sqlplus下重启数据库数据库依然无果,期间碰到多个错误提示: ORA-01034: ORACLE not available

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

1.层次布局 由于地图窗口和菜单栏都在一个父容器内,在浏览器缩小到一定程度点击地图弹出infoWindow时,会出现菜单栏遮挡infoWindow中间部分的现象,于是通过设置Canvas.ZIndex来设置显示层次顺序解决这种冲突. 2.客户端读取Shp文件 有一个应用场景时用户自定义一个范围进行数据统计,包括用户上传已有Shp数据来确定统计区域,如何读取shp文件呢?答案是用了开源的ShapeFileReader类,转化得到graphic,客户端再处理即可.下载地址 http://esrisl

Silverlight项目笔记7:xml/json数据解析、MVVM下实现多级树形结构TreeView、忽视引用类型导致数据绑定错误、通过流或动态空间加载图片、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

涉及的内容主要有: 1.xml/json数据解析 2.多级树形结构TreeView 3.忽视引用类型导致数据绑定错误 4.通过流或动态空间加载图片 5.虚拟目录设置 6.silverlight安全机制引发的问题 7.webclient缓存问题 1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应节点的数据集合,再通过Element这个方法对数据集合进

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

一.使用Linq求差集.交集 使用场景: 需要从数据中心获得用户数据,并以此为标准,同步系统的用户信息,对系统中多余的用户进行删除操作,缺失的用户进行添加操作,对信息更新了的用户进行编辑操作更新. 所以需要通过对数据中心以及系统现有用户信息进行比较,分为三部分: (1) Linq取差集,找出需要删除的用户数据,进行删除(USERNAME为唯一值字段). 使用的是Except这个方法. (2)使用Linq提供的Intersect方法,取得两个用户集合的交集,遍历检查进行更新. (3)同样再次取差集

ArcGIS API for Silverlight 学习笔记

这里主要讲解展示不同的服务地图 先看一个实例: 新建一个Silverlight项目,在MainPage.xaml文件中,引入 ESRI.ArcGIS.Client 命名空间和 ESRI.ArcGIS.Client 所在的程序集 ESRI.ArcGIS.Client,并指定 该命名空间的名字为 esri,当然你也可以用自己的别名,比如myGIS. 接着写Map控件,并指定Map中的地图服务,一个简单的服务地图完成了,代码如下: <UserControl x:Class="ArcGISTile

微软BI项目笔记连载

本系列文章主要是结合实际项目,加上自己的总结,整理出来的一系列项目笔记,涉及微软SQL Server2008中商务智能开发中的多维分析模块: <BI项目笔记>基于雪花模型的维度设计 <BI项目笔记>数据源视图设置 <BI项目笔记>创建标准维度.维度自定义层次结构 <BI项目笔记>创建父子维度 <BI项目笔记>创建时间维度(1) <BI项目笔记>创建时间维度(2) <BI项目笔记>创建多维数据集Cube

项目笔记---CSharp图片处理

原文:项目笔记---CSharp图片处理 最近由于项目上需要对图片进行二值化处理,就学习了相关的图片处理上的知识,从开始的二值化的意义到动态阀值检测二值化等等,并用C#得以应用,学到了很多的知识和大家分享下我个人的经验,希望对大家有帮助. 二值化 二值化简而言之是对一副彩色图片进行0/1运算,最终显示一副黑白相间的图片,其意义多数在于对二值化处理后的图片进行分割识别,一些自动识别的验证码工具大多是先进行二值化,然后在模式识别,最终推断出验证码:我的项目中是由于硬件只支持黑色和白色,所以要对用户的

关于Silverlight项目的建立和怎么运行

1.在新建Silverlight项目时候,如果不勾选[在解决方案中的新网站或现有网站上承载Silverlight应用程序[H]]的话,就不会建相应的Web网站,只能设置属性[允许在浏览器外运行]才能运行效果.→如果勾选了的话可以生成相应的Web网站,不但可以在浏览器中运行执行还能在浏览器外执行运行. 关于Silverlight项目的建立和怎么运行,布布扣,bubuko.com