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),古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。