溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā)

發(fā)布時(shí)間:2021-10-28 10:21:18 來(lái)源:億速云 閱讀:186 作者:柒染 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

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

先前研究過(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ì)編寫的,也可以由其他供應(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í)到新版本可以完全互不干擾。

如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā)

undefined

下圖是上圖的中文說(shuō)明:

如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā)

下圖是插件開(kāi)發(fā)結(jié)構(gòu)類關(guān)系圖

如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā)

有了這個(gè)模型,插件端和主機(jī)端可以完全獨(dú)立地升級(jí)了,只是需要使用映射層。例如,如果主機(jī)的一個(gè)新版本使用全新的方法和屬性,合同就仍可以保持不變,只有適配器需要修改。也可以定義新的合同。適配器可以修改,也可以同時(shí)使用幾個(gè)合同。

下圖顯示了MAF體系結(jié)構(gòu)的外觀為一個(gè)單一的插件。如果我們要?jiǎng)?chuàng)造更多的插件(如演示應(yīng)用程序) ,我們就必須建立新的類來(lái)繼承插件適配器來(lái)完成該功能。

如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā)

4.插件模型文件夾結(jié)構(gòu)

如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā)

除了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)用程序有管道目錄的寫入權(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)用程序中。

如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā)

應(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è),大家研究下。

關(guān)于如何進(jìn)行.NET Framework 3.5中的WPF插件開(kāi)發(fā)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

wpf
AI