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中应用,MEF是微软的插件解决方案。
MEF框架源代码 MEF框架源代码 MEF框架源代码
MEF框架整理学习内容
本解决方案中包含3个程序,1、简单的LocalDB数据的连接,项目名称是LocalDBOperate;2、Prism框架的简单实例,项目名称是Desktop.MainWindow;3、MEF的简单实例,项目名称MEFTest
Silverlight MEF 演示源代码
使用MEF构建可扩展的Silverlight应用程序,这个Demo实现了一个可多重扩展的运算器,可以动态下载包,也可以静态导入。可以作为很好的MEF入门示例吧。
Mef silverlight Example Dianamic Compose Mef silverlight Example Dianamic Compose Mef silverlight Example Dianamic Compose
MEF全称Managed Extensibility Framework(受管理扩展性框架),是微软.NET框架下为提高应用和组件复用程度而推出的。使用MEF能够使静态编译的.NET应用程序转换为动态组合,这...现在,这个框架在.NET3.5中也可以运行。
一个简单的 Silverlight 4 应用程序(MEF+ MVVM+ WCF RIA Services)配套源代码及安装文件 本文是Weidong Shen先生在CodeProject上的文章源代码
MEF框架学习之旅(一)概念 http://www.cnblogs.com/content/archive/2013/05/31/3111156.html#2871216
MEF 注入框架入门导引 ppt.
实现了一个MEF可扩展框架的简易例子,可参考MEF是如何实现并工作的
在WPF中MEF的应用,有简单实例和代码,MEF是主程序
使用Caliburn.Micro实现MEF插件化开发,根据dll插件目录动态加载程序集和主程序的Tab页。
MEF(Managed Extensibility Framework)简单实现
使用MEF动态加载Silverlight视频播放器的示例
项目演示了如何基于 MEF 框架在 Prism 4 中使用。
silverlight 一个好的架构 MEF prism
Mef demoMef demo
MEF模块解耦,WCF Rest 扩展 基础示例