原文: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)的更多相关文章

  1. 【转】MEF程序设计指南二:Silverlight中使用CompositionInitializer宿主MEF

    MEF可以在传统应用程序中使用(包括桌面的Winform.控制台程序和Web的ASP.NET),也可以在RIA的Silverlight中使用.在Silverlight中只是宿主的方式有所不同,实际上在 ...

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

    WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...

  3. SharePoint 2013 Silverlight中使用Net客户端对象模型

    1.创建Silverlight时,选择Silverlight 4,不要选择版本5,试了很久版本5都调用不了,自己也不知道什么原因,谷歌也没找到答案,后来尝试版本4,可以调用: 至于Host the S ...

  4. 重构笔记---MEF框架(下)

    概述 上一篇介绍了MEF的一个很简单很基本的应用,实现了MEF框架并展示了MEF框架的一些基本的要求和设置,这些基础知识很重要,接下来我们分析一下如何扩展或增强MEF框架内容. 增强的Contract ...

  5. 重构笔记---MEF框架(上)

    概述 这篇文章的目的是简要分析对比MAF和MEF,并详细举出MEF设计中的细节和扩展上的细节,达到让读者能实际操作的目的.其中,MAF的设计会附上我的代码,其实就是官方的代码我自己手动联系了一遍,但还 ...

  6. Silverlight中动画的性能浅析

    Silverlight中提供了StoryBoard实现动画,可是StoryBoard的性能实在不敢恭维,特别是动画很大的时候,计算机的CPU和内存的狂增,如此一来性能实在太差,在默认的动画效果中动画实 ...

  7. 在Silverlight中的DispatcherTimer的Tick中使用基于事件的异步请求

    需求:在silverlight用户界面上使用计时器定时刷新数据. 在 Silverlight 中的 DispatcherTimer 的 Tick 事件 中使用异步请求数据时,会出现多次请求的问题,以下 ...

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

    原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 为方便描述, 这里仅以正方形来做演示, 其他图形从略. 运行时效果图:XAML代码:// Transform.XAML< ...

  9. Silverlight中使用MVVM(4)

    Silverlight中使用MVVM(1)--基础 Silverlight中使用MVVM(2)—提高 Silverlight中使用MVVM(3)—进阶 Silverlight中使用MVVM(4)—演练 ...

随机推荐

  1. web压力测试-pylot

    我已经写在使用前Web Bench做压力測试.http://blog.csdn.net/jacson_bai/article/details/41143713 但这个測试,測试结果非常好.缺点就是,无 ...

  2. linuxc_螺纹锁紧pthread_mutex_t

    在实际执行过程中的线程,我们经常需要同步多线程. 然后你可以使用互斥锁来完成任务:在使用过程中互斥锁,有pthread_mutex_init,pthread_mutex_destory,pthread ...

  3. jquery自定义插件——window实现

    该示例实现弹出窗口效应: 1.jquery.show.js /* * 开发人员:lzugis * 开发时间:2014年6月10日 * 实现功能:点击在鼠标位置显示div * 版本号序号:1.0 */ ...

  4. memcached 实验论文

    虽然在这个年龄段谈话memcached 它可能是一个有点晚,最为cached 在应用程序中redis 在之上,下面将谈谈自己的一些看法, 这个文件是不是memcached 理论描述,只写的实验数据和结 ...

  5. IntelliSense 无法仅由函数的返回类型重装分辨

    IntelliSense:无法仅由函数的返回类型重装分辨       d:\programfiles (x86)\microsoft sdks\windows\v7.0a\include\winbas ...

  6. SQL Server 2008性能故障排查(三)——I/O

    原文:SQL Server 2008性能故障排查(三)--I/O 接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完 ...

  7. Tri_integral Summer Training 5 总结

    比赛 题目 B D E G H I J 这是泰国的一场区域赛,除了C题英语非常抽以外,其余题目还不算难读. 一开场就发现了三道很水的题目,0:21:34就把三道题给过了,都是1A,赞Moor的手速. ...

  8. Scrum三头猪

    猪和鸡在过去进入业务合作.他们都打算开一家餐厅,它的售价火腿和鸡蛋. 这想了一下时间猪,我用他的肉,鸡只是用它生下的蛋.万一生意失败,我自己的命就没,,没有不论什么影响. 1. Scrum两类关系人 ...

  9. 基于GeoHash算法的附近点搜索实现(一)

    1. 引入 最近在参加学校的计算机仿真大赛,时间好像有点不够,所以只完成了前面的一部分最基础的功能,中途还是选择了放弃.但是之前的部分的确觉得完成得还不错,在这里分享一下.题目是要完成一个宇宙飞船加油 ...

  10. poj3903 Stock Exchange(最长上升子序列)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:id=3903">http://poj.org/problem?id=3903 Descrip ...