淺談.NET Framework 3.5中的WPF插件開發(fā)
先前研究過SharpDevelop,SharpDevelop采用框架——插件的可擴展的體系結(jié)構(gòu),畢竟代碼水平比較高,對它的插件開發(fā)方式?jīng)]有學(xué)習(xí)徹底。
.NET Framework 3.5 的System.Addin命名空間讓插件開發(fā)變的簡單很多了。
1.什么是AddIns
在應(yīng)用程序運行期間允許動態(tài)添加程序集。
插件開發(fā)可以在給開發(fā)完成的應(yīng)用程序添加功能。我們可以創(chuàng)建一個主機應(yīng)用程序,隨時間的推移給它添加越來越多的功能這些功能可以是開發(fā)團隊編寫的,也可以由其他供應(yīng)商也可以創(chuàng)建插件,擴展該應(yīng)用程序。
2.AddIns(MAF)的設(shè)計目標(biāo)如下
應(yīng)用程序容易開發(fā)插件
在運行期間高效查找插件
開發(fā)主機程序應(yīng)是一個很簡單的過程,但不像開發(fā)插件那么容易
插件和主機應(yīng)用程序應(yīng)獨立進(jìn)行維護和升級
3.MAF體系結(jié)構(gòu) 
MAF體系結(jié)構(gòu)基于一個包含7個程序集的管道。這個管道解決了插件的版本問題。因為管道中的程序集之間的依賴性很低,所以合同、主機程序和插件升級到新版本可以完全互不干擾。 
 
 
下圖是上圖的中文說明:
 
下圖是插件開發(fā)結(jié)構(gòu)類關(guān)系圖 
 
有了這個模型,插件端和主機端可以完全獨立地升級了,只是需要使用映射層。例如,如果主機的一個新版本使用全新的方法和屬性,合同就仍可以保持不變,只有適配器需要修改。也可以定義新的合同。適配器可以修改,也可以同時使用幾個合同。
下圖顯示了MAF體系結(jié)構(gòu)的外觀為一個單一的插件。如果我們要創(chuàng)造更多的插件(如演示應(yīng)用程序) ,我們就必須建立新的類來繼承插件適配器來完成該功能。

4.插件模型文件夾結(jié)構(gòu) 
 
除了AddIns目錄之外,其他目錄都直接包含管道特定部分的程序集。AddIns目錄為每個插件程序集包含一個子目錄。插件也可以保存在完全獨立于其他管道組件的目錄中。
MAF需要使用反射來動態(tài)加載,才能獲得插件的所有信息。而且,對于許多插件而言,這還會增加主機應(yīng)用程序的啟動時間。因此,MAF使用一個 高速緩存,來保存管道組件的信息。該高速緩存是由安裝插件的程序創(chuàng)建的,如果主機應(yīng)用程序有管道目錄的寫入權(quán)限,該高速緩存就由主機應(yīng)用程序創(chuàng)建。
在目錄結(jié)構(gòu)中有一個PipelineSegments.store文件,它是一個外接程序,有兩個任務(wù):
◆將有關(guān)所有外接程序和管線段的信息注冊到緩存文件中。
◆通過搜索緩存查找外接程序的指定宿主視圖的外接程序
在AddIns文件夾里面會有一個Addins.store文件,它的作用就是讓程序查找插件顯示在應(yīng)用程序中。

應(yīng)用插件開發(fā)對應(yīng)用系統(tǒng)來講確實有很大好處,很多應(yīng)用程序都使用了插件開發(fā),例如:Visual Studio、Eclipse、還有瀏覽器IE、FF,雖然我們不是這些軟件的開發(fā)商,但是我們?nèi)匀豢梢栽谶@些軟件里添加我們需要的功能,插件開發(fā)更容易維護和升級系統(tǒng),而且對提高程序運行效率也有很大幫助。
網(wǎng)上關(guān)于Addins的示例代碼比較少,自己找了兩個,大家研究下。
【編輯推薦】















 
 
 
 
 
 
 