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插件机制可以使程序灵活扩展。

 

时间: 2024-10-02 08:06:04

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

Silverlight中使用CompositionInitializer宿主MEF

MEF可以在传统应用程序中使用(包括桌面的Winform.控制台程序和Web的ASP.NET),也 可以在RIA的Silverlight中使用.在Silverlight中只是宿主的方式有所不同,实际上在 Silverlight中也可以像传统应用程序中是方式去宿主,MEF也为Silverlight提供了独特的宿 主方式,使用中需要引用System.ComponentModel.Composition.Initialization.dll动态链 接库. Silverlight中提供了一种新的宿主ME

MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF

MEF可以在传统应用程序中使用(包括桌面的Winform.控制台程序和Web的ASP.NET),也可以在RIA的Silverlight中使用.在 Silverlight中只是宿主的方式有所不同,实际上在Silverlight中也可以像传统应用程序中是方式去宿主,MEF也为Silverlight提供了独 特的宿主方式,使用中需要引用 System.ComponentModel.Composition.Initialization.dll动态链接库. Silverlight中提供了一种新的宿主MEF

Silverlight实用窍门系列:52.Silverlight中的MVVM框架极速入门(以MVVM Light Toolkit为例)

 在本文将以MVVM Light Toolkit为例讲解MVVM框架在现实中的使用入门,首先我们在http://mvvmlight.codeplex.com/下载它的MVVM框架下来.也可以通过 http://files.cnblogs.com/chengxingliang/GalaSoft.MvvmLight.V3.rar 下载MVVM Light Toolkit.然后我们安装这个安装包,然后重新打开VS2010,新建一个项目,如下图所示:    Tip:MVVM分为Model.ViewMod

学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

Silverlight中内置了对于HTML.客户端脚本等的支持.很多情况下,我们编 写的Web应用程序中用了一些JavaScript或者AJAX框架,我们希望能够在 Silverlight调用某些脚本方法,或者说在Silverlight中触发某个脚本的执行, 这时就需要用到在Silverlight中调用JavaScript,本文将简单介绍这一内容. 使用GetProperty获取脚本对象 先来看一个简单的例子,在Silverlight测试页面中放入一个div用作显示信 息: <div id=&quo

Silverlight中的序列化

序列化简言之是这样一种能力:能够把复杂的对象(Object)变成某种格式的字符串(常见的格式有xml,string,二进制文件等),这样可以方便的在各种系统中传输或交换(比喻socket编程中的数据包只能用byte[]传输),接收方得到该字符串后,通过反序列化可以还原为复杂对象,进而调用对象的方法或属性 -- 跟反射有点沾边:) 这里先给出一个WinForm的序列化例子,功能为通过打开文件对话框选择一个文件后,构造一个复杂对象,然后序列化为二进制格式,得到该格式后,再反序列化(还原)为复杂对象

asp.net Silverlight中的模式窗体_实用技巧

其实在Silverlight中开发模式窗体并不难,比在Html里面用div来构造容易多了,但是要做到具有重用性和规范性还是要下一点工夫的.如果SL的开发朋友们想偷一点懒,直接用些现成写好的模式窗体代码的话,我在这里介绍一个SL的框架,叫SilverlightFX,里面就有一个Form类,只要你的xaml类继承了Form类就可以很方便地使用模式窗体了.具体方面可以参照他的sample工程,这里给出SilverlightFX的连接给大家 http://projects.nikhilk.net/Sil

我在框架融合的中遇到一些问题!(DWR+EXT+Spring+mybatis )

问题描述 我在框架融合的中遇到一些问题!(DWR+EXT+Spring+mybatis ) 我的服务器是 WAS的 在服务器上的日志文件中,查看到这样输出. 输出:[16-1-15 9:53:35:449 CST] 00000070 SystemOut O 2016-01-15 09:53:35449 [INFO ]: 保存[16-1-15 9:53:35:449 CST] 00000070 ClassPathXmlA I org.springframework.context.support.

Silverlight中操作Xml

原文http://www.cnblogs.com/ListenFly/archive/2011/10/17/2206719.html 在Silverlight中操作Xml有三种方式,分别是使用XmlReader(XmlWriter),Linq to xml  ,XmlSerializer(进行Xml的序列化). 下面列出微软.net类库提供的读写xml文件个类及其特点: 类名称 优点 缺点 XmlReader 快速.高效.可扩展 只读,只向前,需要人工验证 XmlDocument 可往返.可读写

Silverlight中使用MVVM(4)—演练

转自http://www.cnblogs.com/626498301/archive/2010/08/20/1804155.html Silverlight中使用MVVM(1)--基础      Silverlight中使用MVVM(2)-提高      Silverlight中使用MVVM(3)-进阶     Silverlight中使用MVVM(4)-演练        本来打算用MVVM实现CRUD操作的,这方面例子网上资源还挺多的,毕竟CRUD算是基本功了,因为最近已经开始学习Cailb