C#和JAVA的插件機制-個人總結_第1頁
C#和JAVA的插件機制-個人總結_第2頁
C#和JAVA的插件機制-個人總結_第3頁
C#和JAVA的插件機制-個人總結_第4頁
C#和JAVA的插件機制-個人總結_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、插件框架插件介紹概念肯先山卄發(fā)人員編坷系統(tǒng)框架,井預先定義好 系統(tǒng)的擴展接口a插件由其他開發(fā)人員根據(jù)系 統(tǒng)預泄的接口編耳的護展功慮 實際上就是系 統(tǒng)的擴巖功能模塊。插件都是以個獨立文件 的形式出現(xiàn)*對于系統(tǒng)宋說并不知道插件的具體功能* UW 是為插件帶下預定的接口,系毓啟動的時候棍 據(jù)插II的配貰4找插件.根擁預疋的按口把插 件抹接到系統(tǒng)中。Eclipse插件架構Eclipse插件架構 Eclipsed Mi件結溝圧由父插件符理產插件* Miff Z間由擴展點璉接.£1終形成樹形的結構。插件內部結構插件的內部結構runtime屁性描述了具需婆的Jar包.利發(fā)布的Jar包require

2、s屬性描述了依賴的插件 extension-point描述了本插件過布可護廡的擴翹 extension屈性則描謎了擴展點的實現(xiàn)典型插件定義淸單文件描述(Plugin.xml)<piugin idquery-url* 件的ID name=''URL Query Filter 插件的名字 versions .OO11插件的版本provider-name-Mnu1ch,org S 插件的提供 1VID<runtime>library name=Hquery url.Jar"> 杭較的J前包 <export name=,m,/> 發(fā)布的Ja

3、rfl<library><runtinie><requires>< import plugi n= 'n utch - ex tension points* > 依幀的期件 </requires>extension id-org,apache.nutcksea cher urLURlQuer/Fifter''擴展前IDname=Nulch URL Query Filter1* 擴巖的若字poin:='ong.apache notch searcher OjeryFilterS 前愿|國丁 戰(zhàn)點ID<

4、;iinplementa1ion id="URLQuEyFili打 丈現(xiàn)的IDclassog apachennutch.searcher.url.URLQueryF lterh> 1'洋交<parameter name 'fields' value'url 7> < 見餉和關屬性c implcrr0ntu1ion> <extension></plugin>這個沽啊描述了捕件的絕人多數(shù)缶息,J 插件的id1 name- 木,和功類鴿飛同時 I圻 仃的擴展=擴驅點也都在這里定義,此插件對 外提供的嫌(包

5、牯Native/)以廉遙源也都妥這個文件的名稱是* plugin.xml Eclipse啟動 的時候會掃描"plugins%下的斫右 SlugirLxrmr文利,進血裝戲所有刖插件”插件加載I插件加我插件基本結構ApplicationPlugin.xmlPlugin.xml應川程序加載插件時首先解析毎個插件的描述文件,然 后再應用程序屮動態(tài)加載抽f I屮的類,)調用耒中方法插件類加載-ClassLoader1 丨門!IU 載ClassLoaderCl日ssLo日de一顧名思義,就7L:JavaJp.llj來裝 載類的部分,要將一個類的名字裝載為JVM中 實際的二進制類數(shù)據(jù)。在JVM中

6、,任何一個類 被加載都是通過Class Loader來實現(xiàn)的同 時,每個Class對彖也都有一個引用指向裝載 他的 ClassLoader,你可以通 jgetClassLoader() 方法得到它。插件加載ClassLoader ClassLoader使川所謂的"Delegation Model'* ( “雙親委托模型”)來 化找、定位類資源。每一個ClassLoader祁有口己一個父ClassLoader 實例(在構造的時候傳入),當這個ClassLoader被要求加載一個類 時,它首先會詢問自己的父ClassLoader,看看他是否能加載(注意: 這個過程是一宜遞歸向上的

7、),如果不能的話,才口己加載。 Java ClassLoader的體系結構是插件加較ClassLoader叮見,ClassLoader閆先會查找該類是否已經(jīng) 被裝載,如果沒有,就詢問自己的父 ClassLoader,如果還不能裝載,就調用 findClass()方法來裝載類。所以,一般簡單的 自定義ClassLoaderH需要皤弓findClass方法 就可以了。插件加載過程簡單插件加載過程現(xiàn)有一個主程序用Java語言寫成?,F(xiàn)在要允許 第三方開發(fā)人員編寫擴展的類,約定第二方開 發(fā)的類必須包含個實現(xiàn)了某個已知接口)的 類,名稱不限。如果要求第三力的類必須與主 程序的bytecode分開發(fā)布,把心

8、日爲放在 classpath相應位甕.或把j討丟在某個文件夾 內即可被動態(tài)裝載使用,應如何實現(xiàn)?簡單插件加載過不使用jar打包每個插件。里血包含一個實現(xiàn)已知 學1的類,在間的MANIFEST"F屮定義該類 的全略徑(com.example.blah.MyPluginClass 這樣。使 Hi java, util-jar 中的 JarFile 和 M anifest 類解析j日r包和Manifest文件用 URLCIassLoader裝載該jar包。獲得插件類斤, ffiClass.newlnstance() A 法創(chuàng)造實例L示例:簡單的訐頻播放器實現(xiàn)實現(xiàn):先指定一個接口: 比如叫

9、com.g uoa o.l nterfaces. Playerinterface =. 插件必須包含一個類,實現(xiàn)這個接口。package com.guoao. interfaces; public interface Player Interface void LoadFile(String szFileName); void Play();void Paused;void Stop。;String GetSupportedFormal();創(chuàng)建一個插件。插件包含一個類,實現(xiàn)這個接口。這個類叫 com.guoao.MP3Playerpackage com.guoao;import com.gu

10、erfaces.Playerl nterface;public class MP3Player implements Playerinterface Overridepublic void LoadFile(String szFileName) System.out.println(szFileName+" is loading.Overridepublic String GetSupportedFormatO return new String(-mp3J;Overridepublic void Play() Systeni.out.println(wmp3 form

11、at is playing!");Overridepublic void Pause() System .out. pri nlln(” mp3 format is paused!');Overridepublic void Stop() System.out.pnnlln(”mp3 format is stopped!M);這個但將被打入一個jarRa我們還需耍一個MANIFEST. MF 文件Manifest 代碼 Manifest-Version; 1.0Plugin-Class: com. guoao.MP3Player同理,音樂播放器對丁其他譏頻格式的文件操作可以做

12、成 不同的插件,并打成jar包形式,應用程序會根據(jù)選擇的不 同的苕頻格式加載不冋的插件,從而實現(xiàn)了插件的功能。 Manifest-Version: 1.0 Plugin-Class: com. guoao.WMAPlayerMusicPIayer.classIcomguoaoLinterlacos Player Interface jluginsMP3PlayenjarWMAPlayer.jar總結總 .序并不了解plugins R錄中有多少插件。 在運行時列舉冃錄.2.主程序對每個plugins文件(比如叫MP3Player.jar)的亍解只肴:MP3Player 的 METAJNF/MAN

13、IFEST.MF 中有 一個Plugin-Class屬性,指左了該插件類的路 徑(相當手plugin, xml作用),這個插件類擁有一個不帶參數(shù)的構造方法。 這個插件類實現(xiàn)了com.guoa 0interfaces. Playerinterface 接 口。Eclipse插件加載過程Eclipse插件加載過程幾個重要的類是: Plugin:插件類,描述每個具體插件; PluginDescriptor:插件描述符,記錄了插件的ID片Name、Version依賴*擴亠展點等;PluginManager:插件管理器,負貴所何插件 資源的管理,包括扌擊件的啟動、停止、使能(Enable/Disable

14、)等等二PluginRegistry:插件注冊表,提供了一個由插 件ID到Plugin的換射:系統(tǒng)啟動流程系統(tǒng)的啟幼流程;首先將所有的插件潔單讀入("plugim.xmr),并 根據(jù)這個丈件解析UlPluginDescriptor (包括這個Plugin的所右導 出庫、依賴插件、擴展點等等).放到PlugiriRegistry中。這個過 程也是整個插件平臺的一個非常重要的部分,需要從插件清單中解 析的部分包插:1、每個插件所依賴的的插件列表(在"plugin.xml" fflrequire'1 element標識八2. 每個插件囉輸出的資源利類(在&quo

15、t;plugin.xml*中用”library*' element標識八3, 每個插件所帀明的擴展點列衷:4、每個插件所聲明的擴展列表(擴展其它擴展點的擴展)“當把所有的插件信息都讀入到系統(tǒng)中,就可以 根據(jù)自己的需要來啟動指定的插件了懶加載法則插件的外形(比如名字,ID,圖標等等都在 插件描述淸單”plugin.xml沖蘆明,而具體功能 封裝在class文彳牛申。這種懶加載原則表現(xiàn)在務個方面,比如最基本 的插件啟動。系統(tǒng)在啟動的時候,只加載和啟 動最必須的一些抽件,而其它抽件只有在真正 川到的時候才被加載和啟動,這樣可以最大限 度的節(jié)省系統(tǒng)啟動時的資源和時間。而對用戶 來說,每次啟動也

16、確實有很多插件根本不會左 用到。構造Eclipse插件Eclipse中的插件用擴展點的機制連接起來,形成如下圖所示的系統(tǒng)結 欷 插件必須實現(xiàn)擴展點,以此捕入到系統(tǒng)中.新増擴展點并不是必 須的,俁只仃新刑了擴展點的插件才可以被別人擴展。構造Eclipse插件在eclipse插件體系中,plugin.xml是插 件和Eclipse的接 U, Eclipse就彖一所火宅子,它的外瑞(plugin.xml) 很多的門(擴展點),我們更熟練進出這座大宅子,得 搞消楚它有哪些門示例;透視圖的建立構造Eclipse插件 修改plugin.xml文件.設辻透視圖的擴展點 打開plugin.xml文件的編耕帕

17、將如下代碼塊插入到戢祈彳r的v/plugin>Z前: oxtension= point=°org.eclipse.ui.perspectivesM>perspective name=wmyplugin 透視圖' iconicons/selectalLgif class Jmyplugi n. actions. SamplePerspective” id=Mmyplugin.actio ns.SamplePerspective、</perspedive><extension>透視圖類: /文件名:SamplePerspective.java

18、public class SamplePerspective implements I Perspective Factory Override public void createlnitialLayout(IPageLayout layout) Eclipse插件開發(fā)為透視添加視圖:修改plugin.xml,實現(xiàn)擴展點<extensionpointorg.eclipse.ui.views<categoryname=Mmyplugin 視圖”id=Hcom.guoao.myplugin.view"></category> <viewname視圖什

19、icon 二” icons/prev.gif”category 二” com. guoao.myplugin.view” class=,'myplugin.actions.View1H id="myplugin.actions.Viewl '*> </view> <viewname=H 視圖 2” icon:=”ic on s/prev.gif” category=,com.guoao.myplugin.viewH class="myplugin.actions.View2n id=nmyplugin.actions.View2,&g

20、t;</view></extensi on>視圖類的實現(xiàn)Viewl .javaVie w2. java.在透視圖屮顯示視圖:修改透視圖類 SamplePerspectiveJava插件框架概述開放工廠 OSGi.NET插件框架,是 OSGi R4.2規(guī)范移植到.NET平臺的實現(xiàn)。OSGi全稱為Open Service Gateway Initiative,它一方面指由 IBM、Oracle、BEA SAP等國際 IT 巨頭組成的 OSGi 聯(lián)盟組織;另一方面指該組織制定的一個基于Java語言的服務規(guī)范 一一OSG服務平臺。OSGi.NET插件框架提供了模塊化與插件化、面

21、向服務架構和模塊擴展三大功能,適用于控 制臺、WinForm、Windows服務、WPF、ASPNET和移動平臺等任意.NET應用環(huán)境。 目前,OSG i已經(jīng)得到廣泛的應用,如下所示。WebSphere,ORACLe4帶 ParemusE O ProSyst插件程序結構基于OSGi.NET插件框架的應用程序體系結構如下圖所示。在這里,應用程序由主程序和插件組成。主程序 是具體的應用環(huán)境的入口,它用于啟動OSGi.NET插件框架并進入插件框架暴露出來的入口點;應用插件則是實現(xiàn)軟件不同功能的業(yè)務模塊。OSGi.WET插件框架主程序(Console r WinFormASP.NET 等)OSGi.N

22、ET插件框架優(yōu)點開放、規(guī)范、統(tǒng)一:符合規(guī)范的模塊均可被OSGi.NET插件框架加載快速集成:將模塊放在插件模塊即實現(xiàn)功能集成。高度可重用:僅通過拷貝即可實現(xiàn)重用,無需修改任何代碼。熱插拔與動態(tài):每一個模塊都可被動態(tài)安裝、啟動、停止和卸載。標準模塊化與模塊物理隔離:模塊具有統(tǒng)一規(guī)范且互相獨立。面向服務編程支持:提供基于面向服務架構編程模型以支持模塊通訊。 動態(tài)可擴展:通過暴露擴展點實現(xiàn)動態(tài)擴展。多環(huán)境支持:支持各種.NET應用環(huán)境。插件框架原理插件和插件運行時在OSGi.NET插件框架中,插件即 Bundle,它具備物理隔離、熱插拔和動態(tài)特性。每一個插件都是完全可復 用的,可以被動態(tài)的安裝、啟動

23、、停止、卸載或更新。插件運行時即BundleRuntime,則是插件的運行容器,它負責從插件目錄中加載和啟動插件。面向服務在OSGi.NET插件框架中,插件具備高內聚、低耦合特性,也就是說插件間耦合度非常低。服務即Service,是插件通訊的方式。在這里,服務=接口 +實現(xiàn)”接口是服務的契約,服務提供商實現(xiàn)了服務的接口并將服務注冊到服務總線,服務消費者則通過服務契約從服務總線搜索服務并綁定使用。這里,服務是動態(tài),可以被動態(tài)注冊、卸載和更新,一個服務契約也可能有多個服務實現(xiàn)。插件運行時BundleRuntime插件擴展在OSGi.NET插件框架,插件具備可擴展性,可以在不變更插件代碼情況下,更改

24、或者擴展插件的行為。這 個擴展機制是通過一對基于 XML格式的擴展點+擴展”來實現(xiàn)的。一個插件可以通過定義擴展點”來實現(xiàn) 可擴展,而其它插件則通過定義對應的擴展”來注冊/更新功能。擴展/擴展點在插件啟動時注冊到插件運行時,相反,在卸載時,則從插件運行時卸載。插件運行時Bun die Runtime片段插件在OSGi.NET有一種特殊的插件,稱為片段插件,即Fragment Bundle。片段插件相當于子插件,其作用是為了擴充其它插件的類型空間、擴展信息。除了片段插件的插件,都是宿主插件(Host Bundle)。與宿主插件不同的是,片段插件不能被啟動、停止,沒有類加載器,不允許從片段插件加載類

25、型。當宿主插件被啟 動后,片段插件會自動附加到宿主插件,即將片段插件的類型空間、擴展信息合并到宿主插件。片段插件片段插件FragmenTrragrherrBundleBundlemH擴展點 Ext ension Point擴廣Extens ion插件IL U赫件BundleBundleBundle服務 5ervi<e使用展務Service服務拾線Service Reg istry插件運行a寸BundleRuntime開放工廠原理開放工廠原理概述開放工廠主要由iOpenWorks開放工廠平臺和 OSGi.NET插件SDK組成。開發(fā)者從iOpenWorks開放工廠平臺中下載到OSGi.NET

26、插件SDK 并使用該SDK的項目模板來創(chuàng)建一個插件應用程序。開放工廠原理圖如下所示。插件倉陣犧件版本曾理SDK,客戶端管理OSGirtft相共哀仲骨理捕件倉ftOpenAPIiOpenW開放工廠平臺iOpenWorkS$DK? OSGi-NETftti架、頂目模扳、工具、文檔和示例iOpenWorks開放工廠平臺主要由插件倉庫和插件倉庫OpenAPI組成。插件倉庫實現(xiàn)插件的版本管理、OSGi.NET內核文件版本管理、SDK及客戶端管理,而插件倉庫 OpenAPI則向外 暴露了插件及其版本信息、內核文件及其版本信息從而為客戶端提供內核及插件的自動升級支持。OSGi.NET插件SDK由開發(fā)者安裝,

27、向開發(fā)者提供了 OSGi.NET插件框架、OSGi.NET Web擴展、 iOpenWorks啟動程序這三個開發(fā)程序集,此外,還提供了插件項目模板、遠程管理控制臺(用于調試用,可以查看OSGi.NET內核情況)、文檔、示例。開發(fā)者使用OSGi.NET插件SDK 的項目模板來創(chuàng)建 WinForm或者Web插件應用程序時,這個模板默認實現(xiàn)了:( 1)調用iOpenWorks啟動程序程序集來檢查內核文件版本并執(zhí)行更新;(2 )創(chuàng)建插件運行時BundleRuntime并運行,從而啟動插件內核,默認從Plugins目錄加載插件;(3)高級模板默認包含了頁面流服務插件、應用中心插件、插件管理服務插件、遠程

28、管理服務插件、WebService包裝器服務插件(插件自動升級插件沒有在模板中包含,可以從插件倉庫中下載)OSGi.NET插件應用程序運行流程及插件協(xié)作關系概述使用OSGi.NETf件SDK創(chuàng)建的插件應用程序結構如下所示。這個默認的模板中包含了開放工廠原理圖所述的iOpenWorks啟動程序、OSGi.NET插件框架、默認的幾個插件。當這個插件程序運行后,它首先調用iOpenWorks啟動程序來檢測OSGi.NET插件框架等內核 文件版本并下載更新,接著啟動插件運行時,從Plugins目錄中加載并啟動插件。在這里,iOpenWorks啟動程序將調用開放工廠平臺的插件倉庫OpenAPI檢查是否有

29、新版本的內核并從倉庫中下載最新版本的文件(如原理圖的箭頭7所示)。在啟動插件過程中,如果應用程序下載安裝了自動更新插件,該插件會調用插件管理服務來檢查插件倉庫更新情況,并自動下載最新版本的更新包,等重新啟動應用程序時,執(zhí)行自動更新。在這里,插件管理服務將調用開放工廠平臺的插件倉庫OpenAPI來獲取插件倉庫的新插件 和新版本的插件并利用OpenAPI進行下載安裝或升級插件(如原理圖的箭頭 5、6所示)。插件運行時啟動完成后,主程序從運行時獲取頁面流服務,獲取入口點并運行入口插件的程序,進入主界面或者插件中心插件(如原理圖的箭頭1所示)。插件中心插件也將調用插件管理服務,獲取開放工廠插件倉庫的新

30、插件和插件的最新版本, 當點擊下載插件時,利用插件管理服務從插件倉庫下載安裝或升級插件(如原理圖的箭頭4、6所示)。此外,當插件運行時啟動完成后,遠程管理服務插件利用 WebService服務包裝器將 OSGi.NET內核管理功能暴露成 Web服務,這樣 OSGi.NET插件SDK的遠程管理控制臺運行起來后, 便可以調用該 Web服務實現(xiàn)內核插件、服務瀏覽以及插件啟動、停止、卸載和安裝操作, 方便插件程序的 調試(如原理圖的箭頭 2、3所示)。開放工廠插件機制插件在OSGi.NET插件框架中,插件是一個具備物理隔離性、完全重用的功能模塊。在這里插件=Manifest.xml +類+資源” Ma

31、nifest.xml是插件的描述文件,位于插件目錄的根目錄下;類即插件的類型空間,由插件自 身的程序集和依賴的插件/依賴的程序集組成,資源類似與類,由插件本身的資源和依賴的資源組成。插件目錄柘杵根冃錄BundleLocatian插件由Manifest.xml插件清單文件、程序集、資源組成,程序集和資源位于插件根目錄或者子目錄下。其 標準目錄結構如下。* Manifest.xmUf件清單文件>*.dll程序集文件>具它資源文件稈序集文件具它資忑丈n插件類加載在OSGi.NET插件框架中,插件擁有獨立的目錄結構,具備物理隔離性。相應地,每一個插件有獨立的類型 空間,這個類型空間由插件程

32、序集、插件依賴的程序集、片段插件程序集和片段插件依賴的程序集組成。 插件的類型是由插件類加載器來加載的。.MET杠聖程序集脫鮒呈序案當你在插件中使用myClass = newMyClassInBundle(),插件類加載器會按照上面的順序搜索需要加載的MyClasslnBundle類型。與此同時,你也可以通過調用插件對象的LoadClass方法(IBundle.LoadClass)從插件類型空間中動態(tài)加載一個類型。插件生命周期在OSGi.NET插件框架中,插件具有生命周期。 插件生命周期狀態(tài)有:Installed、Resolved Active、Uninstalled 四個可見狀態(tài)和 Star

33、ting、Stopping兩個臨時狀態(tài)。其中,Installed表示插件已經(jīng)安裝;Resolved表示插件依賴的程序集或者依賴的插件已經(jīng)滿足,這個插件可以被正常啟動;Active則表示插件已經(jīng)被成功啟動;Uninstalled表示插件已經(jīng)被卸載。Starting是一個過渡狀態(tài),當啟動插件時,如果插件使用了晚激活策略, 則插件在注冊擴展信息、服務信息之后,直接返回,不會執(zhí)行激活器的Start方法,這個方法會推遲到第一次從這個插件加載類型時調用并進入Active狀態(tài);反之,如果沒有使用晚激活策略,插件會調用激活器 Start方法并進入Active狀態(tài)。在啟動過程,如果出現(xiàn)異常,則插件會自動轉回Re

34、solved狀態(tài)。Stopping是另一個臨時狀態(tài),在停止插件時,首先進入該狀態(tài),然后調用激活器的Stop方法后進入Resolved狀態(tài)。安裝更新或屁斯StartingJActive)薦止Stmuiriq)Unin&tallEd丿插件運行時和插件啟動過程插件框架啟動時,首先從插件目錄中發(fā)現(xiàn)并加載所有的插件;然后,對插件進行依賴解析, 判斷插件依賴的程序集和依賴的插件是否滿足;接著,按照啟動級別順序啟動所需的插件; 一旦插件啟動完成,則插件框架便完成啟動。在插件啟動過程中,將按照創(chuàng)建插件上下文、注冊擴展點/擴展信息、注冊服務信息、創(chuàng)建插件激活器并調用 Start方法的順序完成一個插件的啟

35、動過程。如果插件實現(xiàn)的晚激活,則 推遲最后一步的執(zhí)行, 直到第一次從插件加載類型;如果插件沒有定義激活器,則忽略最后_. rH步0刨崖啟動插曲運石時扣載插件r解析插件依賴r啟前所*插件運行時啟動完成創(chuàng)建插件上下文注開擴展點/T展信息注冊服務涪息創(chuàng)產插件激活聽并調用5伯rt方法需眉就£存插件相關對象插件運行時BundleRuntime插件運行時BundleRuntime代表插件框架內核對象,它是所有插件的運行容器。在示例中,控制臺主程序在 Program的Ma in函數(shù)中,通過創(chuàng)建Bun dleRu ntime對象并調用其 Start方法 來啟動插件框架內核。當Start方法調用完成后

36、,BundleRuntime對象將從插件目錄中加載插件并啟動插件。通過以下代碼,您就可以創(chuàng)建并啟動插件框架,然后加載并啟動所有插件。/創(chuàng)Matter時對象默認堀件呂錄APlugir口錄.lsing (Bundi更Rr time bundleRuntirr - new BLndl-=Runtifne()bundleRuri-J.me.Sta; /啟動插杵運冇E,加載莽啟動擂件目錄下的所有插件+匚onsole.WritcLine"'Tress ny key to exit.,hJ;匚onsole,Read();認識插件插件也稱為Bundle,從OSGi.NET規(guī)范上講,插件=Ma

37、nifest.xml +類+資源”其中, Manifest.xml即插件清單文件,用于描述插件的基本信息、類型信息和擴展信息;插件具備隔離的類型空間,由插件本身的程序集和依賴的插件的程序集組成;插件擁有自己的資源,存放在私有的文件夾。在定義一個插件時,您只需要關注三個非常重要的接口,分別是:插件激活器IBundleActivator、插件IBundle和插件上下文IBundleContext。其中,插件激活器由開發(fā)人員自己定義;而插件 IBundle和插件上下文IBundleContext則由插件內核創(chuàng)建, 你可以在插件激活器獲取中獲取到這兩個對象。插件清單 Manifest.xml插件清單文

38、件(Manifest.xml )位于模塊標準目錄結構的根目錄之下,它定義了模塊的基本信息、模塊激活 信息、模塊類加載相關的運行時信息、服務定義信息、模塊擴展定義信息以及模塊詳細信息。< ?jtml version-" I er:ading-" j-、i Bundle Jtmln£-"urn : Liosp-bur dls-rar±rst-2*0h Symijollch3ellPluin"srmion -11二麗陸 - "ghwl-PL礙 ir In it 15 lizt! J5 ta te-"vs11 Sta

39、rtLeel'-"2"><Activator Type"ShellPlugln,Activat&r" Policy-"JrwiedlBte' /><Runtinie><Lienibly Pdth=Hbi AShllPugir.Jl_,* 百h(j任J'hhh /></Runti.Tie><ExtenslonPuin't Pain*t="5hellPlugir.Meriu5ta"ip" />< /liind

40、lo以上清單文件定義了該模塊的一個本地程序集“binShellPlugin.dll ,'該程序集位置相對于模塊的根目錄,當然,你也可以指定一個絕對目錄。模塊還定義了一個激活器和擴展點。IBundleActivatorIBundleActivator表示插件激活器,是插件的入口和出口,用于在插件啟動或停止時執(zhí)行相關操作。插件激活器通過 Manifest.xml的Activator節(jié)點配置,當插件被啟動時插件激活器的Start方法被調用, 當停止時Stop方法被調用。在插件激活器的 Start/Stop方法的context參數(shù),即插件上下文IBundleContext對象,通過IBundleContext您 還可以獲取對應的插件IBundle實例。以下是一個激活器定義的示例。你需要在插件清單文件Manifest.xml添加一個激活器配置:vActivatorType="HelloBundle.Activator" Policy="lmmediate" /> 。usi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論