日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
VisualStudio2010中Silverligh實(shí)現(xiàn)頁(yè)面動(dòng)態(tài)裝配

.NET 4.0中提供了一個(gè)MEF框架用于開發(fā)支持插件的軟件系統(tǒng),幸運(yùn)的是,Silverlight 4也支持MEF,這就使得我們可以很容易地實(shí)現(xiàn)頁(yè)面的動(dòng)態(tài)裝配功能。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都網(wǎng)站建設(shè)、高縣網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、高縣網(wǎng)絡(luò)營(yíng)銷、高縣企業(yè)策劃、高縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供高縣建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

用戶在訪問Silverlight應(yīng)用程序時(shí),開始可以只顯示一個(gè)“初始的簡(jiǎn)單的”頁(yè)面,當(dāng)用戶需要時(shí),動(dòng)態(tài)從Web網(wǎng)站上下載新的程序集,然后,Silverlight客戶端應(yīng)用程序再使用MEF將動(dòng)態(tài)下載的程序集中所包容的頁(yè)面組件“組裝”為一個(gè)新的功能增強(qiáng)了的頁(yè)面,示例解決方案DynamicComposePage展示了相關(guān)的技術(shù)細(xì)節(jié)。下面簡(jiǎn)要介紹一下其開發(fā)步驟。

1 使用Visual Studio 2010創(chuàng)建一個(gè)名為DynamicComposePage的Silverlight Business Application項(xiàng)目,Visual Studio 2010將會(huì)幫助我們創(chuàng)建一個(gè)名為DynamicComposePage.Web的ASP.NET網(wǎng)站,它引用名為DynamicComposePage的Silverlight項(xiàng)目。

在解決方案資源管理器中展開DynamicComposePage項(xiàng)目節(jié)點(diǎn),在其Views文件夾下可以看到Visual Studio 2010生成的一個(gè)Home.xaml頁(yè)面,等一會(huì)我們將修改此頁(yè)面實(shí)現(xiàn)頁(yè)面的動(dòng)態(tài)裝配。

2 現(xiàn)在需要提供一個(gè)MEF部件都遵循的接口,為此,向解決方案中添加一個(gè)“Silverlight類庫(kù)(Silverlight Class Library)”項(xiàng)目[1]MyPartContract,并向其中添加一個(gè)IMyPart接口,為簡(jiǎn)單起見,本例不為此接口添加任何成員,當(dāng)然,在實(shí)際開發(fā)中可以依據(jù)需要為其添加合適的成員。

 
 
 
 
  1. namespace MyPartContract  
  2.  
  3. {  
  4.  
  5. public interface IMyPart  
  6.  
  7. {  
  8.  
  9. }  
  10.  

注意:這不是普通的“類庫(kù)”項(xiàng)目,Silverlight所使用的程序集是重新編寫的,與標(biāo)準(zhǔn)的.NET Framework不一樣。

3 下面定義可供動(dòng)態(tài)組合的Silverlight頁(yè)面組件。

向示例解決方案中添加一個(gè)名為“MyPageParts”的“Silverlight類庫(kù)(Silverlight Class Library)”項(xiàng)目,注意在彈出的對(duì)話框中選擇“Silverlight 4”。然后,向MyPageParts項(xiàng)目中添加一個(gè)“Silverlight User Control”,取名“MyEditorControl”,在這個(gè)頁(yè)面中我們將放置一個(gè)RichTextArea控件充當(dāng)文字編輯器:

 
 
 
 
  1.  
  2.  
  3.  

現(xiàn)在,需要讓此用戶控件可以被MEF動(dòng)態(tài)裝配,為此,需要完成兩個(gè)步驟:

(1)給本項(xiàng)目(也包括前面創(chuàng)建的Silverlight項(xiàng)目DynamicComposePage)都添加對(duì)包容了IMyPart接口的Silverlight類庫(kù)MyPartContract的引用。

(2)給本項(xiàng)目(也包括前面創(chuàng)建的Silverlight項(xiàng)目DynamicComposePage)都添加對(duì)MEF核心程序集System.ComponentModel.Composition.dll的引用,將要負(fù)責(zé)完成“裝配”工作的Silverligh項(xiàng)目DynamicComposePage還需要添加對(duì)另一個(gè)核心程序集System.ComponentModel.Composition.Initialization.dll的引用。注意:在以下位置才能找到上述程序集:C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries。下面是支持MEF動(dòng)態(tài)裝配的Silverlight 4用戶控件的相應(yīng)代碼,注意其中的“[Export]”標(biāo)記:

 
 
 
 
  1. [Export(typeof(IMyPart))]   
  2. public partial class MyEditor : UserControl,IMyPart  
  3.  
  4. {  
  5.  
  6. public MyEditor()  
  7.  
  8. {  
  9.  
  10. InitializeComponent();  
  11.  
  12. }  
  13.  

4 現(xiàn)在開發(fā)進(jìn)行“動(dòng)態(tài)裝配”的Silverlight頁(yè)面(位于DynamicComposePage項(xiàng)目Views文件夾中的Home.xaml),在頁(yè)面上放置一個(gè)Button用于啟動(dòng)裝配過程,另一個(gè)TextBlock用于顯示提示信息,更重要地,放置一個(gè)ContentControl作為部件容器,用于顯示動(dòng)態(tài)裝配出來的頁(yè)面部件:

 
 
 
 
  1.  
  2.  
  3. ……  
  4.  
  5. Click="btnShowEditor_Click" ……/> 
  6.  
  7.    
  8.  

#p#
下面簡(jiǎn)介一下此頁(yè)面中的關(guān)鍵代碼,首先,我們需要指定Home.xaml頁(yè)面“需要”一個(gè)IMyPart部件,為此,我們給Home類添加以下屬性,并且給其附加“[Import]”標(biāo)記:

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

在Home.xaml頁(yè)面初次顯示時(shí),并不加載部件程序集,當(dāng)用戶點(diǎn)擊按“我要編輯文本”按鈕后,動(dòng)態(tài)創(chuàng)建一個(gè)WebClient對(duì)象從Web網(wǎng)站上下載程序集:

 
 
 
 
  1. private void DownloadAssemblyAndCompose()  
  2.  
  3. {  
  4.  
  5. //獲取程序集的URI  
  6. string uri = Application.Current.Host.Source.AbsoluteUri;  
  7. int index = uri.IndexOf("/ClientBin"); //找出根URL  
  8. uriuri = uri.Substring(0, index) + "/MyParts/MyPageParts.dll";  
  9. WebClient client = new WebClient();  
  10. this.txtInfo.Text = "正在下載文本編輯器組件……";  
  11. client.OpenReadCompleted += new   
  12. OpenReadCompletedEventHandler(client_OpenReadCompleted);  
  13. //啟動(dòng)異步下載  
  14. client.OpenReadAsync(new Uri(uri));  
  15. this.btnShowEditor.IsEnabled = false; //防止用戶第二次啟動(dòng)下載……  
  16.  

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

 
 
 
 
  1. void client_OpenReadCompleted(object sender,   
  2. OpenReadCompletedEventArgs e)  
  3.  
  4. {  
  5. //加載資源  
  6. AssemblyPart part = new AssemblyPart();  
  7. Assembly ass = part.Load(e.Result); //提取程序集  
  8. //創(chuàng)建Catalog  
  9. AssemblyCatalog cata = new AssemblyCatalog(ass);  
  10. CompositionContainer container = new CompositionContainer(cata);  
  11. CompositionBatch bat = new CompositionBatch();  
  12. bat.AddPart(this);  
  13. container.Compose(bat); //裝配……  
  14. //顯示裝配好的頁(yè)面組件  
  15. if (mypart != null)  
  16. MyEditorContainer.Content = mypart;  
  17.  

上述代碼中的關(guān)鍵在于下載程序集完成之后,從流中動(dòng)態(tài)加載程序集,然后再調(diào)用MEF來裝配部件。

5 最后一步,在Web網(wǎng)站中創(chuàng)建一個(gè)專用的部件文件夾“MyParts”,將包容了可裝配部件的程序集復(fù)制到這一文件夾下。

下圖展示了示例項(xiàng)目運(yùn)行時(shí)動(dòng)態(tài)下載并組裝頁(yè)面的截圖:

從本示例看到,將MEF和WebClient組件結(jié)合起來,可以讓我們實(shí)現(xiàn)Silverlight頁(yè)面的“按需下載”和“動(dòng)態(tài)組合”,充分展示了Silverlight 4的強(qiáng)大功能!

【編輯推薦】

  1. Visual Studio 2010中Parallel類實(shí)現(xiàn)并行計(jì)算
  2. Visual Studio 2010中C++項(xiàng)目升級(jí)指南
  3. Visual Studio 2010中測(cè)試用例工作項(xiàng)類型介紹
  4. 在Visual Studio 2010選擇合適的項(xiàng)目測(cè)試方法
  5. 細(xì)數(shù)VS 2003到Visual Studio 2010的開發(fā)之路

分享題目:VisualStudio2010中Silverligh實(shí)現(xiàn)頁(yè)面動(dòng)態(tài)裝配
當(dāng)前鏈接:http://www.dlmjj.cn/article/djchshs.html