|
繼上一篇《Silverlight開發(fā)廋身攻略(一)》,在上一節(jié)中我主要介紹了在實際開發(fā)中怎么動態(tài)加載圖片資源的方法,并附有實例。在這一節(jié)中主要給大家介紹MEF(Managed Extensibility Framework)的知識來實現(xiàn)Xap包的動態(tài)加載。
Managed Extensibility Framework(MEF)是.NET平臺下的一個擴(kuò)展性管理框架,它是一系列特性的集合,包括依賴注入(DI)以及Duck Typing等。MEF為開發(fā)人員提供了一個工具,讓我們可以輕松的對應(yīng)用程序進(jìn)行擴(kuò)展并且對已有的代碼產(chǎn)生最小的影響,開發(fā)人員在開發(fā)過程中根據(jù)功能要求定義一些擴(kuò)展點,之后擴(kuò)展人員就可以使用這些擴(kuò)展點與應(yīng)用程序交互;同時MEF讓應(yīng)用程序與擴(kuò)展程序之間不產(chǎn)生直接的依賴,這樣也允許在多個具有同樣的擴(kuò)展需求之間共享擴(kuò)展程序。簡單的說:MEF程序設(shè)計主要Export (輸出)、Import (輸入)、Compose (組合)三個動作來完成。MEF的核心包括一個catalog和一個CompositionContainer。category用于發(fā)現(xiàn)擴(kuò)展,而container用于協(xié)調(diào)創(chuàng)建和梳理依賴性。每個可組合的Part提供了一個或多個Export,并且通常依賴于一個或多個外部提供的服務(wù)或Import。每個Part管理一個實例為應(yīng)用程序運行。
關(guān)于MEF的基礎(chǔ)知識在這里不是重點,大家可以在網(wǎng)上搜一下,有很多介紹這方面的文章。下面直截以實例轉(zhuǎn)入正題。在實例中我們創(chuàng)建三個Silverlight Application項目,它們分別是:MEFLoadXap、FristXap、SecondXap。MEFLoadXap是主項目,它是一個容器,通過它來動態(tài)加載FristXap、SecondXap包。本實例環(huán)境是VS.NET 2010 NET4.0,在NET4.0中集成了MEF的功能。
一、新建MEFLoadXap項目
1、用VS.NET 2010新建名為MEFLoadXap的Silverlight Application項目,添加System.ComponentModel.Composition、System.ComponentModel.Composition.Initialization引用,如下圖所示:
2、在MEFLoadXap項目下添加DeploymentCatalogService.cs文件,在文件中添加IDeploymentCatalogService接口,并編寫繼承此接口的DeploymentCatalogService的類,此類主要封裝了下載指定Xap包,自動導(dǎo)入帶有Export屬性標(biāo)簽類型為UserControl控件對象。
IDeploymentCatalogService代碼:
/// <summary>
/// 加載Xap服務(wù)接口
/// </summary>
public interface IDeploymentCatalogService
{
/// <summary>
/// 加載Xap包的方法
/// </summary>
/// <param name="uri">Xap包路徑</param>
/// <param name="completedAction">加載完成后的事件</param>
void AddXap(string uri, Action<AsyncCompletedEventArgs> completedAction = null);
/// <summary>
/// 移除Xap包的方法
/// </summary>
/// <param name="uri">Xap包路徑</param>
void RemoveXap(string uri);
}
NET技術(shù):Silverlight開發(fā)廋身攻略(二),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。