Visual Studio 2010中Silverligh實現頁面動態裝配(2)

發表于:2010-03-26來源:作者:點擊數: 標簽:SilverlighStudioVisualvisualstudio
Visual Studio 2010中Silverligh實現頁面動態裝配(2) 軟件測試 .NET 4.0中提供了一個MEF框架用于 開發 支持插件的軟件系統,幸運的是,Silverlight 4也支持MEF,這就使得我們可以很容易地實現頁面的動態裝配功能。 下面簡介一下此頁面中的關鍵代碼,首先,我

  Visual Studio 2010中Silverligh實現頁面動態裝配(2)  軟件測試 

    .NET 4.0中提供了一個MEF框架用于開發支持插件的軟件系統,幸運的是,Silverlight 4也支持MEF,這就使得我們可以很容易地實現頁面的動態裝配功能。

  下面簡介一下此頁面中的關鍵代碼,首先,我們需要指定Home.xaml頁面“需要”一個IMyPart部件,為此,我們給Home類添加以下屬性,并且給其附加“[Import]”標記:

  [Import(typeof(IMyPart))] public IMyPart mypart { get; set; }

  在Home.xaml頁面初次顯示時,并不加載部件程序集,當用戶點擊按“我要編輯文本”按鈕后,動態創建一個WebClient對象從Web網站上下載程序集:

  private void DownloadAssemblyAndCompose() { //獲取程序集的URI string uri = Application.Current.Host.Source.AbsoluteUri; int index = uri.IndexOf("/ClientBin"); //找出根URL uriuri = uri.Substring(0, index) + "/MyParts/MyPageParts.dll"; WebClient client = new WebClient(); this.txtInfo.Text = "正在下載文本編輯器組件……"; client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); //啟動異步下載 client.OpenReadAsync(new Uri(uri)); this.btnShowEditor.IsEnabled = false; //防止用戶第二次啟動下載…… }

  注意:在本示例中我們假設所有的可裝配部件都放在Web網站的MyParts文件夾下,并且假設我們已經知道了要下載的程序集文件名。在實際項目中,我們可以設計一個用于掃描部件文件夾并向Silverlight客戶端返回可裝配部件的WCF Service,以允許真正“全動態”的裝配工作。上述代碼為WebClient的下載完畢事件(OpenReadCompletedEvent)掛接了一個事件響應方法,其中包容了本例最核心的功能代碼:

  void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { //加載資源 AssemblyPart part = new AssemblyPart(); Assembly ass = part.Load(e.Result); //提取程序集 //創建Catalog AssemblyCatalog cata = new AssemblyCatalog(ass); CompositionContainer container = new CompositionContainer(cata); CompositionBatch bat = new CompositionBatch(); bat.AddPart(this); container.Compose(bat); //裝配…… //顯示裝配好的頁面組件 if (mypart != null) MyEditorContainer.Content = mypart; }

  上述代碼中的關鍵在于下載程序集完成之后,從流中動態加載程序集,然后再調用MEF來裝配部件。

  5 最后一步,在Web網站中創建一個專用的部件文件夾“MyParts”,將包容了可裝配部件的程序集復制到這一文件夾下。

創建MyParts文件夾

  下圖展示了示例項目運行時動態下載并組裝頁面的截圖:

項目運行時動態

  從本示例看到,將MEF和WebClient組件結合起來,可以讓我們實現Silverlight頁面的“按需下載”和“動態組合”,充分展示了Silverlight 4的強大功能!

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97