MEF框架在Silverlight中应用(15)

原文: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)

时间: 2024-10-15 03:09:29

MEF框架在Silverlight中应用(15)的相关文章

WPF Step By Step 系列-Prism框架在项目中使用

WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Prism框架来构建基础的应用框架,并且如何来设计项目的架构和模块,下面我们就来一步步开始吧. 本文大纲 1.Prism框架下载和说明 2.Prism项目预览及简单介绍. 3.Prism框架如何在项目中使用. Prism框架下载和说明 Prism框架是针对WPF和Silverlight的MVVM框架,这

[Win10]1 WPF和WP8 Silverlight中的导航问题

一.Frame.Page框架的相关介绍 1.Frame类: 继承层次结构 System.Object   System.Windows.Threading.DispatcherObject     System.Windows.DependencyObject       System.Windows.Media.Visual         System.Windows.UIElement           System.Windows.FrameworkElement           

Silverlight中使用MVVM(4)—演练

本来打算用MVVM实现CRUD操作的,这方面例子网上资源还挺多的,毕竟CRUD算是基本功了,因为最近已经开始学习Cailburn框架了,感觉时间 挺紧的,这篇就实现其中的更新操作吧.         功能很明确,当我们更改DataGrid中的CheckBox时,将源中当前发生变化的数据项在界面上显示出来.我们仍然在前面项目的基础上实现这个功能 首先我们需要给实体Person类添加一个Bool的属性,因为这里我们只对这个属性值操作,所以对于age,name属性也就无必要实现更改通知了 public

Silverlight中ListBox的数据绑定

在Silverlight中ListBox是一个非常强大的控件.总结下ListBox的绑定数据的方式. 首先,新建一个Book类, 1 public class Book 2 { 3 public string BookName { get; set; } 4 5 public string Author { get; set; } 6 } 接下来BookViewModel.cs中, 1 public class BookViewModel 2 { 3 private List<Book> bo

silverlight中WCF不能传递List&lt;string&gt;

SL:List<string> Dishes = ...;ServiceReference1.Service1Client myClient = new Service1Client();myClient.MakeOrderAsync(Dishes); WEB:[OperationContract]public Boolean MakeOrder(List<string> dishes){   ...   return true;} 提示: 错误 6 与"Ordering

(2)从实际项目谈起,基于MEF框架的插件的总体设计

1.MEF框架简介 MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成部分,在3.5上也可以使用.熟悉java中的spring框架的人,对这个框架中涉及的几个概念应该会比较容易理解. 这里我先把我两年前的一个完整的利用MEF搭建的插件式系统中涉及到的MEF框架里的几个基本概念大致描述下. 1.1 依赖注入(export.import) MEF框架中提供 import和export功能,即注入和导出.Spring中有依赖注入这个概念,这

WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示

原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 为方便描述, 这里仅以正方形来做演示, 其他图形从略. 运行时效果图: XAML代码:// Transform.XAML <Canvas Width="700" Height="700" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://sc

aspx利用cookie值来停止silverlight中的计时器

一.silverlight与silverlight中可以利用委托(delegate)来刷新frame.Refresh() 1.在子类中定义委托捕捉关闭事件按钮 1 public delegate void onCloseClick(object sender, RoutedEventArgs e); 2 public onCloseClick onclose; 3 private void CancelButton_Click(object sender, RoutedEventArgs e)

Silverlight中关于ComboBox的各种使用

前端放置了几个ComboBox的控件. 1 <Grid x:Name="LayoutRoot" Background="White"> 2 <ComboBox Height="23" HorizontalAlignment="Left" Margin="26,49,0,0" Name="comboBox1" VerticalAlignment="Top&quo