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)—演练 ...
随机推荐
- App如何选择移动广告平台,开发者2 - 移动变现模式分析
开发人员社区的上述分析.它可能无法覆盖全部,但是,每一个开发者都需要根据自己的特点变现模式选择.继App流动性模式做了全面的分析. 游戏.广告.电商是互联网的三种变现模式,移植到移动互联网也相同适用. ...
- hdu 4912 Paths on the tree(树链拆分+贪婪)
题目链接:hdu 4912 Paths on the tree 题目大意:给定一棵树,和若干个通道.要求尽量选出多的通道,而且两两通道不想交. 解题思路:用树链剖分求LCA,然后依据通道两端节点的LC ...
- SGU 200. Cracking RSA(高斯消元+高精度)
标题效果:鉴于m整数,之前存在的所有因素t素数.问:有多少子集.他们的产品是数量的平方. 解题思路: 全然平方数就是要求每一个质因子的指数是偶数次. 对每一个质因子建立一个方程. 变成模2的线性方程组 ...
- 如何获得SQL Server索引使用情况
原文:如何获得SQL Server索引使用情况 原文出自: http://www.mssqltips.com/sqlservertip/1239/how-to-get-index-usage-info ...
- python 2.x 与3.x的区别
下载了点python的电子书,有基于3.x的有基于2.x的让我不知道看哪些好,BD一下差别着实很大有木有?print语句变成了函数有木有?之后都得加括号了有木有? 别人整理的成果,我就无耻地搬来借用啦 ...
- quick-cocos2d-x教程8:程序框架内lib文件夹分析
lib文件夹是如今全部文件夹中最复杂的,包括了整个运行所需的库文件.我们简单看下,在开发初期,不须要深入到这个库里去研究 cocos2d-x 文件夹就是c++版的原始文件 framework_prec ...
- 实现Asp.net Mvc分布式Session Redis群集
Redis群集实现Asp.net Mvc分布式Session Session的缺点 众所周知Asp.net Session默认存储在IIS中,IIS的重启会导致Session丢失. 如果你的网站使用了 ...
- 读改善c#代码157个建议:建议1~3
目录: 建议一:正确操作字符串 建议二:使用默认转型方法 建议三:区别对待强制转型和as 建议一.正确操作字符串 1.确保尽量少的装箱 static void Main(string[] args) ...
- Android适配方案小结(一)
相关计量单位介绍: px:是屏幕的像素点,不同设备显示的效果一样. in:英寸(1英寸等于2.54cm) mm:毫米 pt:磅, 1/72英寸 dp:device independent pixels ...
- 编写WCF服务时右击配置文件无“Edit WCF Configuration”(编辑 WCF 配置)远程的解决办法
原文:编写WCF服务时右击配置文件无“Edit WCF Configuration”远程的解决办法 今天在看<WCF揭秘>书中看到作者提出可以在一个WCF Host应用程序的App.Con ...