新聞中心
插件還有其他稱呼,如add-on或plug-in。

十余年的清豐網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整清豐建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“清豐網(wǎng)站設(shè)計(jì)”,“清豐網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
先前研究過(guò)SharpDevelop,SharpDevelop采用框架——插件的可擴(kuò)展的體系結(jié)構(gòu),畢竟代碼水平比較高,對(duì)它的插件開(kāi)發(fā)方式?jīng)]有學(xué)習(xí)徹底。
.NET Framework 3.5 的System.Addin命名空間讓插件開(kāi)發(fā)變的簡(jiǎn)單很多了。
1.什么是AddIns
在應(yīng)用程序運(yùn)行期間允許動(dòng)態(tài)添加程序集。
插件開(kāi)發(fā)可以在給開(kāi)發(fā)完成的應(yīng)用程序添加功能。我們可以創(chuàng)建一個(gè)主機(jī)應(yīng)用程序,隨時(shí)間的推移給它添加越來(lái)越多的功能這些功能可以是開(kāi)發(fā)團(tuán)隊(duì)編寫(xiě)的,也可以由其他供應(yīng)商也可以創(chuàng)建插件,擴(kuò)展該應(yīng)用程序。
2.AddIns(MAF)的設(shè)計(jì)目標(biāo)如下
應(yīng)用程序容易開(kāi)發(fā)插件
在運(yùn)行期間高效查找插件
開(kāi)發(fā)主機(jī)程序應(yīng)是一個(gè)很簡(jiǎn)單的過(guò)程,但不像開(kāi)發(fā)插件那么容易
插件和主機(jī)應(yīng)用程序應(yīng)獨(dú)立進(jìn)行維護(hù)和升級(jí)
3.MAF體系結(jié)構(gòu)
MAF體系結(jié)構(gòu)基于一個(gè)包含7個(gè)程序集的管道。這個(gè)管道解決了插件的版本問(wèn)題。因?yàn)楣艿乐械某绦蚣g的依賴性很低,所以合同、主機(jī)程序和插件升級(jí)到新版本可以完全互不干擾。
其中心是合同程序集。這個(gè)程序集包含一個(gè)合同接口,其中列出了插件必須實(shí)現(xiàn)、可以由主機(jī)程序調(diào)用的方法和屬性。合同的左邊是主機(jī)端,右邊是插件端。圖中還 顯示了程序集之間的依賴性。最左端的主機(jī)程序集與合同程序集沒(méi)有依賴性,插件程序集與合同程序集也沒(méi)有依賴性,這兩個(gè)程序集都沒(méi)有實(shí)現(xiàn)合同定義的接口,只是有一個(gè)對(duì)視圖程序集的引用。主機(jī)應(yīng)用程序引用主機(jī)視圖;插件引用插件視圖。視圖包含抽象的視圖類(lèi),該類(lèi)定義的方法和屬性與合同相同。
下圖是上圖的中文說(shuō)明:
下圖是插件開(kāi)發(fā)結(jié)構(gòu)類(lèi)關(guān)系圖
有了這個(gè)模型,插件端和主機(jī)端可以完全獨(dú)立地升級(jí)了,只是需要使用映射層。例如,如果主機(jī)的一個(gè)新版本使用全新的方法和屬性,合同就仍可以保持不變,只有適配器需要修改。也可以定義新的合同。適配器可以修改,也可以同時(shí)使用幾個(gè)合同。
下圖顯示了MAF體系結(jié)構(gòu)的外觀為一個(gè)單一的插件。如果我們要?jiǎng)?chuàng)造更多的插件(如演示應(yīng)用程序) ,我們就必須建立新的類(lèi)來(lái)繼承插件適配器來(lái)完成該功能。
4.插件模型文件夾結(jié)構(gòu)
除了AddIns目錄之外,其他目錄都直接包含管道特定部分的程序集。AddIns目錄為每個(gè)插件程序集包含一個(gè)子目錄。插件也可以保存在完全獨(dú)立于其他管道組件的目錄中。
MAF需要使用反射來(lái)動(dòng)態(tài)加載,才能獲得插件的所有信息。而且,對(duì)于許多插件而言,這還會(huì)增加主機(jī)應(yīng)用程序的啟動(dòng)時(shí)間。因此,MAF使用一個(gè) 高速緩存,來(lái)保存管道組件的信息。該高速緩存是由安裝插件的程序創(chuàng)建的,如果主機(jī)應(yīng)用程序有管道目錄的寫(xiě)入權(quán)限,該高速緩存就由主機(jī)應(yīng)用程序創(chuàng)建。
在目錄結(jié)構(gòu)中有一個(gè)PipelineSegments.store文件,它是一個(gè)外接程序,有兩個(gè)任務(wù):
◆將有關(guān)所有外接程序和管線段的信息注冊(cè)到緩存文件中。
◆通過(guò)搜索緩存查找外接程序的指定宿主視圖的外接程序
在AddIns文件夾里面會(huì)有一個(gè)Addins.store文件,它的作用就是讓程序查找插件顯示在應(yīng)用程序中。
應(yīng)用插件開(kāi)發(fā)對(duì)應(yīng)用系統(tǒng)來(lái)講確實(shí)有很大好處,很多應(yīng)用程序都使用了插件開(kāi)發(fā),例如:Visual Studio、Eclipse、還有瀏覽器IE、FF,雖然我們不是這些軟件的開(kāi)發(fā)商,但是我們?nèi)匀豢梢栽谶@些軟件里添加我們需要的功能,插件開(kāi)發(fā)更容易維護(hù)和升級(jí)系統(tǒng),而且對(duì)提高程序運(yùn)行效率也有很大幫助。
網(wǎng)上關(guān)于Addins的示例代碼比較少,自己找了兩個(gè),大家研究下。
文章名稱:淺談.NETFramework3.5中的WPF插件開(kāi)發(fā)
URL鏈接:http://m.5511xx.com/article/dhdciji.html


咨詢
建站咨詢
