MEF框架在Silverlight中应用(15)
MEF框架在Silverlight中应用
MEF框架是微软提供的一个插件框架。应用概括为一句话:输入,输出,组合。下面是具体在Silverlight中应用中的关键代码。
步骤
1.Client端建立3个Silverlight项目。
MEFSilverLight4(主项目,组装部件)
SilverlightApplication1(部件)
SilverlightApplication2(部件)
2.Server建立一个测试项目。调用Silverlight
如图:
3.添加引用类库组件
1)MEFSilverLight4项目中添加引用
System.ComponentModel.Composition.dll,System.ComponentModel.Composition.Initialization.dll
关键代码:
//定义输出
[Export(typeof(UserControl))]
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
}
组合部件关键代码:
//导入部件
[Import(typeof(UserControl))]
public UserControl myUI { get; set; }
//组装部件:1.加载程序包。2.将数据包初始化到宿主中。3.异步下载程序包。4.下载成功后组合部件,应用部件。
private void Application_Startup(object sender, StartupEventArgs e)
{
string typeUI = HtmlPage.Document.QueryString["UI"];
string strxap = "";
if (typeUI == "1")
{
strxap = "SilverlightApplication1.xap";
}
else if (typeUI == "2")
{
strxap = "SilverlightApplication2.xap";
}
else
{
strxap = "MEFSilverLight4.xap";
}
DeploymentCatalog de = new DeploymentCatalog(strxap);//加载程序包
CompositionHost.Initialize(de);//初始化到宿主中
//异步下载
de.DownloadCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(de_DownloadCompleted);
de.DownloadAsync();
}
/// <summary>
/// 异步下载完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void de_DownloadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (e.Error == null)
{
CompositionInitializer.SatisfyImports(this);//组合部件
this.RootVisual = myUI;//显示
}
}
2)SilverlightApplication1,添加引用System.ComponentModel.Composition.dll
关键代码:
//定义输出
[Export(typeof(UserControl))]
public partial class SLU1 : UserControl
{
public SLU1()
{
InitializeComponent();
}
}
3)SilverlightApplication2,添加引用System.ComponentModel.Composition.dll
关键代码:
//定义输出
[Export(typeof(UserControl))]
public partial class SLU2 : UserControl
{
public SLU2()
{
InitializeComponent();
}
}
4,Web调用代码
1)加载主程序包,创建项目时自动生成。
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/MEFSilverLight4.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>
</a>
</object>
2)测试代码
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/MEFSilverLight4TestPage.aspx?UI=1" Target="_blank">测试1</asp:HyperLink>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/MEFSilverLight4TestPage.aspx?UI=2" Target="_blank">测试2</asp:HyperLink>
<asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/MEFSilverLight4TestPage.aspx?UI=3" Target="_blank">测试3</asp:HyperLink>
4.总结
1)可以解决将Silverlight项目解耦,分离项目之间的依赖关系。
2)避免.xap包过大,网络下载比较慢,可以实现按需加载。
3)mef插件机制可以使程序灵活扩展。
MEF框架在Silverlight中应用(15)的更多相关文章
- 【转】MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF
MEF可以在传统应用程序中使用(包括桌面的Winform.控制台程序和Web的ASP.NET),也可以在RIA的Silverlight中使用.在Silverlight中只是宿主的方式有所不同,实际上在 ...
- WPF Step By Step 系列-Prism框架在项目中使用
WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...
- SharePoint 2013 Silverlight中使用Net客户端对象模型
1.创建Silverlight时,选择Silverlight 4,不要选择版本5,试了很久版本5都调用不了,自己也不知道什么原因,谷歌也没找到答案,后来尝试版本4,可以调用: 至于Host the S ...
- 重构笔记---MEF框架(下)
概述 上一篇介绍了MEF的一个很简单很基本的应用,实现了MEF框架并展示了MEF框架的一些基本的要求和设置,这些基础知识很重要,接下来我们分析一下如何扩展或增强MEF框架内容. 增强的Contract ...
- 重构笔记---MEF框架(上)
概述 这篇文章的目的是简要分析对比MAF和MEF,并详细举出MEF设计中的细节和扩展上的细节,达到让读者能实际操作的目的.其中,MAF的设计会附上我的代码,其实就是官方的代码我自己手动联系了一遍,但还 ...
- Silverlight中动画的性能浅析
Silverlight中提供了StoryBoard实现动画,可是StoryBoard的性能实在不敢恭维,特别是动画很大的时候,计算机的CPU和内存的狂增,如此一来性能实在太差,在默认的动画效果中动画实 ...
- 在Silverlight中的DispatcherTimer的Tick中使用基于事件的异步请求
需求:在silverlight用户界面上使用计时器定时刷新数据. 在 Silverlight 中的 DispatcherTimer 的 Tick 事件 中使用异步请求数据时,会出现多次请求的问题,以下 ...
- WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示
原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 为方便描述, 这里仅以正方形来做演示, 其他图形从略. 运行时效果图:XAML代码:// Transform.XAML< ...
- Silverlight中使用MVVM(4)
Silverlight中使用MVVM(1)--基础 Silverlight中使用MVVM(2)—提高 Silverlight中使用MVVM(3)—进阶 Silverlight中使用MVVM(4)—演练 ...
随机推荐
- 《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag
矩阵和图像操作 (1)cvGEMM函数 其结构 double cvGEMM(//矩阵的广义乘法运算 const CvArr* src1,//乘数矩阵 const CvArr* src2,//乘数矩阵 ...
- UVA - 10714 Ants
最多时间就是每仅仅蚂蚁选择最久的爬行方式 最少时间就是每仅仅蚂蚁选择最快地爬行方式 #include<iostream> #include<map> #include<s ...
- OpenCVR 有新成员 OpenCVV OpenCVC
OpenCVC主要负责OpenCVR报名, OpenCVV支持Android IOS Mac Windows 的client 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- HDU2149-Public Sale
Public Sale Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- WebGL 在 OpenGL ES 指令 iOS 在 C 分歧版指令分析
WebGL 中 OpenGL ES 指令与 iOS 中 C 版指令的差异简析 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途 ...
- T-SQL技巧收集——拆分字符串
原文:T-SQL技巧收集--拆分字符串 在开发中,很多时候都需要处理拆分字符串的操作.下面收集了几种方法供大家分享,其中的逗号可以改为多种有需要的符号,但是不能针对多种符号同时存在的例子.有待各位补充 ...
- 对LevelDB的“升级版”存储引擎RocksDB的调研成果
Google的leveldb是个非常优秀的存储引擎.但还是有一些不尽人意的地方,比方leveldb不支持多线程合并.对key范围查找的支持还非常easy,未做优化措施,等等.而Facebook的Roc ...
- android4.4组件分析--service组件-bindService源代码分析
6.1.1. bindService 由于有前面分析startService的代码实现过程,则对于bindService的代码分析就不用那么具体介绍,在介绍流程的同一时候更关注一些细节上的部分. ...
- android可扩展自己的定义,运动图像裁剪框
在实际项目中,常常要制作一个简易的图像裁剪功能,即获取一张图片.并用一个遮罩层选择目标范围并截取保存的功能.例如以下图所看到的: 在此分享下该自己定义视图的制作过程. 需求说明 整一个视图包括一个透明 ...
- 原子操作(atomic operation)
深入分析Volatile的实现原理 引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共 ...