2024年4月25日发(作者:)
第11卷第2期
2011年6月
南京工业职业技术学院学报
Journal of Nanjing Institute of Industry Technology
Vo1.11,No.2
Jun.,2011
Silverlight 4.0中应用MEF 实现组件动态加载的研究
胡光永
(南京工业职业技术学院
摘
计算机与软件学院,江苏 南京210046)
要:针时Silverlight生成的xap包文件过大这一问题,提出了按业务逻辑进行分割的策略,并采用MEF技术实现业
务功能的按需动态加载,给出具体实现恩路与步骤。结果表明,使用MEF能使基于Silverlight的应用系统转换为动态
组合、按需下栽,进一步增强用户体验。
关键词:MEF;Silvedight;动态加载;用户体验;Visual Studio 2010
中图分类号:TP272 文献标识码:A 文章编号:1671—4644(2011)02—0040—03
引言
基于Silverlight技术的RIA(Rich Interactive Applications)
应用程序有非常大的应用与开发优势。Silverlight在网页上
以较低成本实现影片、动画、互动交互,提供精彩多媒体创意
统计与分析等展示功能,采用该技术进行实现。对于Silver-
Right应用程序,由于展示功能较为丰富,导致生成的应用程
序较大,下载需要时间较长,为了提升启动速度和性能,恰当
地进行分割,即将一个大的xap包切分成多个小的xap包,实
现按需下载,避免下载不需要的程序集带来的性能损失。
分割问题的核心问题是制定恰当地分割策略,哪些内容
应该独立成一个xap包,来实现分块下载,本文根据模块职责
和丰富的交互性,极大增强用户体验。因其良好的用户体
验,很好地解决了浏览器兼容性问题,在业务应用系统的开
发中应用广泛。从项目实现角度来看,Silverlight提供了较好
的开发模式。开发者与uI设计师能较好地并行、 同工作,
两类角色使用完全不同的资源和开发工具,开发者使用Visu—
al Studio 2010进行业务逻辑的实现,uI设计师采用Blend设
计工具进行用户体验规划与实现 J。系统运行时,Silverlight
作为一个浏览器的插件,应用数据能够缓存在客户端,从而
不同采取不同的分割方法。对于整个Silverlight应用程序按
业务和使用用户的不同二个维度进行分割。权限管理仅有
系统管理员使用,将其单独建立一个xap包,学生评教建立独
立xap包,统计与分析建立一个xap包,统计与分析使用的基
本图元建立一个xap包。对于非Silverlight应用,公共服务类
如数据访问层的CommDAL类库,属于共享程序集,主要职责
是进行数据库的访问与数据存取,各业务功能均需使用,只
需在主Silverlight程序中引用程序集的“复制本地”属性设置
为true,将其嵌入到主应用程序中,其他的xap包引用该程序
集,将“复制本地”设置为false,避免了各非主xap多次下载
同一个程序集的多个副本。分割出来的每个xap包建立一个
Silverlight项目,将5M大小的一个xap分成3个xap(如图1
实现一个比基于HTML的响应速度更快,且数据往返于服务
器次数更少的用户操作过程。
笔者在开发教学质量监控系统过程中,为了增强用户体
验,更好地满足业务需求,部分业务功能采用Silverlight4技
术进行开发。但由于Silverlight默认将应用程序打包成一个
xap文件,大小约有5M,执行过程中若仅使用部分功能,也需
要全部下载,导致执行初始化的速度较慢。
经笔者研究,采用.NET 4.0新增的MEF技术,给出解决
所示),一个公共类库,大幅减少初次下载时间,通过运行时
动态加载,提升了下载速度,增加用户响应速度,进一步改善
了用户体验。
该问题的解决方案。对Silverlight应用程序按业务逻辑进行
分割,分成若干个xap文件,用户使用时进行按需下载,实现
动态加载,较好地解决这一问题。本文研究如何较为合理的
分割xap文件,采用.NET 4.0新增的MEF开源技术实现按
需动态下载功能与编码实现。
2实现MEF的部件分割
分割后,需解决按需动态加载的问题。在.NET 4.0版本
之前,通常采用接口及反射技术实现 j,或采用第三方的依
赖注入框架等技术来解决,上述二种解决办法技术实现较为
复杂,实现成本较高。.NET 4.0中微软提供了开源的MEF
(Managed Extensibility Framework)技术框架 ,随CLR一起
发布的解决动态下载的方案,MEF的核心由目录(catalog)和
1 Silverlight应用程序分割
为了增强交互性,提高用户体验,解决浏览器兼容性问
题,开发团队并行协同工作提高开发。在开发教学质量监控
系统过程中,用户体验要求较高的部分功能采用了Silverlight
技术实现 。在系统权限管理、学生在线评教等业务功能,
收稿日期:2011—04—08
包容器(compositioncontainer)组成。catalog负责查找扩展,
container负责协调创建依赖。
基金项目:南京工业职业技术学院2010年科研基金重点项目(编号:YK10—02—01)
作者简介:胡光永(1974一),男,江苏徐州人,南京工业职业技术学院讲师,系统分析师,研究方向:软件工程与技术。
第1 1卷第2期 胡光永:Silverlight4.0中基于MEF的组件动态装配技术的研究与实现 41
图1分割后的Sflverfight应用程序包之间的关系
采用基于特性的编程模型。使用MEF框架,需引用Sys—
tern.comp0nentMode1.Composition.dll组件。其核心编程内容
之一是创建部件,部件是ComposablePart类的实例,用[Im—
port]只能与一个导出对应,本应用中需导人多个对象,需要
用[ImpotrMany]代替[import],通过下述的部件组合方式后,
宿主即可以使用多个部件。
[ImportMany(typeof(IUIDep),A110wRecomposition=
true)]
AllowRecomposition=tue该属性用于标识该部件为可 r
port]、[Export]特性进行标注的类即继承该类。在程序运行
时动态组合,[Import]描述一个部件需要外界服务,此部件也
称为宿主对象,[Export]标记一个部件能为外部提供服务。
Silverlight 4.0以前的版本不支持MEF,在安装Silverlight
4 Tools For Visual Studio 2010插件后,即能使用MEF。基于
重新组合,保证了异步下载完成后该部件仍可重新使用。
通过上述三个开发步骤,定义出了导人和导出部件,部
Silverlight的应用开发和步骤与.NET4.0基本相同,在Silver—
light中只是宿主的方式有所不同,除了在Silverlight中可以
像传统应用程序中的方式去宿主之外,MEF为Silverlight提
件的开发工作已完成。下一步工作是如何完成部件的动态
加载、动态组装和使用。
供了独特的宿主方式,使用中需要引用System.Component—
Mode1.Composition.Initialization.dll动态链接库。
3实现按需动态加载
MEF的另外两个核心编程内容是实现与操作部件目录
以位于独立的AppInputTeacherlnfo项目中的权限管理开
发为例,应用MEF实现按需动态下载。具体步骤为:
(1)首先定义通用接口类,权限管理xap包中实现该接
口,该接口的目的是为宿主应用能识别该类并能按需进行动
态下载。
///<summary>
(catalog)、部件组合容器(CompositionContainer)。部件目录
主要用于说明有何部件构成,部件之间的关系,是实现部件
识别的核心组件。部件组合容器方便实现程序部件的装载,
以及动态的组合应用程序部件等功能,方便的得到程序部件
的程序集、导出部件等信息。部件组合容器主要用于对创建
后部件进行组合,container用于协调创建和整理依赖性。
定义部件组合容器,实现动态加载。采用Silverlight特
///部件要实现的接口
///</summary>
有的Deploymentcatalog指定下载的xap包,实现程序部件的
加载,动态组合各xap部件,得到部件的程序集、导出部件等
信息。Deploymentcatalog能识别下载包中的部件,为了提高
public interface IUIDep
1
性能与用户体验,采取异步下载。定义一个或多个导人(Im—
orpt)和导出(Export)部件,然后通过MEF容器进行组合。下
(2)权限管理xap包中定义[expon],表示该类对外提供
服务。
载后组合成目录。
在宿主项目DynamicLoadWithMEF中的App类内定义全
局部件目录对象,作为动态组合部件的内容整理容器。
public static AggregateCatalog allCatlog=null;
[Export(typeof(IUIDep))]
public paniM class SilverlightPart3:UserControl
{
//实现按需动态下载
Uri download=new Uri(“ApplnputTeacherlnfo.xap”,Uri・
public SilverlightPart3()
1
Kind.Relative);
var TeachInfoCat=new DeploymentCatalog(download);
InitializeComponent();
}
}
App.allCatlog.Catalogs.Add(TeachInfoCat);//动态下载
内容加入全局目录
TeachlnfoCat.DownloadCompleted+=deployCata
Down—
(3)在宿主应用程序中定义导入[impot]。一个[irm—
loadCompleted;
42 南京工业职业技术学院学报 第11卷第2期
TeaehlnfoCat.DownloadAsync();//进行异步下载
实例化一个DeploymentCatlaog对象,将其添加到App.
allCalfog.Catalogs中,实现动态下载xap包。
究基于MEF技术的动态加载技术,给出开发MEF的具体实
现。实践表明,MEF是一个优秀的面向插件、动态加载的扩
展性管理框架,功能强大,编程简化。较好地解决xap包文件
太大,首次下载较慢的问题,希望能为类似系统的设计与实
动态下载完成后进行页面的动态刷新,实现用户使用动
态加载的内容。当用户需要时,动态从Web网站上下载程序
集,Silverlight客户端应用程序使用MEF将动态下载的xap包
现提供借鉴作用。在Silverlight页面中用代码完成部件加
载,显示代码与部件加载代码造成紧耦合,如何进行解决,基
中的页面“组装”成一个新的功能供目标用户使用。
public void 0nImportssatis ed()
于MVVM设计模式进行分散关注研究,这将是下一步的研究
课题。
参考文献:
{
ControlContainer.Items.Clear();
foreach(UserControl ue in UIAllParts)
ControlContainer.Items.Add(UC);
[1]艾迪明.基于WEB的车辆加油信息系统的设计与实现
[J].微型电脑应用,201l,27(1):47—49.
[2]刘向斌,杨珉.基于Web2.0的数字音乐图书馆[J].计算
机工程,2009,35(8):104—106.
}
4结语
基于Silverlight技术的应用系统有较大优势。但其生成
的xap包过大导致下载速度较慢,本文给出分割策略,深入研
[3]王琦.用.NET技术实现三层架构的人事管理系统[J].电
化教育研究,2006(8):74—76.
[4]金旭亮..NET4.0面向对象编程漫谈[M].北京:电子工
业出版社。2010:271—292.
Research and Implementation of Dynamic Assembly of Components
Based on MEF in Silverlight 4.0
Hu Guang—yong
(Nanjing Institute ofIndustry Technology,Nanjing 210046,China)
Abstract:This paper,aiming at the problem that the file of Xap package,a application system generated by Silverlight,is too large,
resulting in a slower download speed,propsoes a business logic partitioning strategy in Silverlight applications,based on open source ex—
tensible framework MEF,to realize dynamic load on—demand,and ivesg concrete thinking line and steps.The results showe that the
MEF can make use of Silverlight・based application system into a dynamic combination of on—demand downloads,improve the user appli—
cation expefence,is to create scalable applications for better solutions.
Key words:MEF;Silverlight;dynamic loading;Visual Studio 2010
(责任编辑周晓芸)

发布评论