




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、模塊化示例Sample01:一個簡單的模塊1新建一個名為SimpleModuleShell的“控制臺宿主應用程序”項目。2添加一個新建項目,名稱為SimpleModule項目,其項目路徑指向SimpleModuleShell項目的binplugins文件夾,這樣一個默認的模塊便創(chuàng)建完成。3新建的SimpleModule模塊由Activator.cs文件和Manifest.xml文件組成。4Manifest.xml是模塊的配置信息,默認創(chuàng)建的內容如下。這個模塊配置定義了模塊的特征名稱是SimpleModule,激活器是SimpleModule.Activator,包含一個模塊工程下的“binSi
2、mpleModule.dll”本地程序集。一旦SimpleModuleShell運行,SimpleModule模塊會被按裝到系統(tǒng)并調用SimpleModule.Activator的Start方法啟動模塊,反之,一旦停止,Stop方法會被調用。注意:Manifest.xml默認編輯器是UIOSP編輯器,它是一個圖形化編寫模塊配置的工具,如下所示。駕SimpleModuleShellMicrosoftVisualStudio文件(E)編輯視圏(Y)VAssistX項目()生成凹調試)城IMCD測試窗口酗幫助(hD勺上戈T,匸kDebugAnyCPU號Manifesta(mlManifestocml
3、DesignGenerationInformationConfigurationBundleType:HostBundleaJERUnESpecifythegenerationinformationofbundle.SymbolicName(*):Version:|SimpleModuhName:StartLevel:uo-suapqSimpleModuleActivatorSimpleModule.Activator輯決方案資源琶理器偉軸案Simple.4X聡11曲園|國13解決方案SimpleModuleShell(2個項目)EI-0SimpleModule由.國Properties由弓I
4、用!曹Activator.csL.圏Manifestjcml題SimpleModuleShell申.囤Properties由el引用S-口bin曹Program.cs口Lazyactivatethebundleuntiloneclassofitisloaded.FTStartthebundlewhentheframeworkisactivated.Specifythedetailinformationofthisbundle.AuthorCategory:Copyright:Description:ContactAddress:LjPendingChanges就緒如果要查看Manifest.x
5、ml文件,按F7或者右鍵查看代碼。5Activator.cs是激活器的定義,在該模塊我們定義的激活器如下。usingSystem;usingSystem.Collections.Generic;usingUIShell.OSGi;namespaceSimpleModule/模塊激活器,它是一個模塊啟動和停止的入口。當模塊被啟動時,激活器的Start方法會被調用;如果是被停止,則其Stop方法會被調用。/一般而言,一個模塊會在Start方法中向系統(tǒng)提供功能、注冊服務、申請如線程等資源等,在Stop方法會執(zhí)行回收操作,比如關閉功能、/卸載服務、釋放資源等。需要注意的是,在Start方法中申請的資源
6、必須在Stop方法中得到釋放,而且一個模塊的Start/Stop方法在運行/過程可能會被調用多次,必須確保再次調用Start/Stop方法不會出現(xiàn)異常。/publicclassActivator:IBundleActivator/模塊啟動時調用的方法。/paramname=context模塊上下文,通過模塊上下文可以獲取對框架功能訪問、服務注冊表訪問、模塊生命周期等功能訪問。/模塊上下文是框架提供給模塊唯一的對象。/parampublicvoidStart(IBundleContextcontext)Console.WriteLine(SimpleModuleisstarted.);/summ
7、ary/模塊停止時調用的方法。/summary/paramname=context模塊上下文。/parampublicvoidStop(IBundleContextcontext)Console.WriteLine(SimpleModuleisstopped.);6運行SimpleModuleShell,SimpleModule模塊默認會被啟動。該模塊在啟動時會在控制臺輸出“SimpleModuleisstarted.。7使用RemoteConsole查看模塊運行狀態(tài),其結果如下8在RemoteConsole輸入“stop/start3”分別用于停止和啟動SimpleModule模塊,模塊狀態(tài)
8、便發(fā)生改變,且激活器Stop/Start方法會被分別調用,并在控制臺打印以下信息。Sample02:模塊初始狀態(tài)1在Sample01基礎上,修改Manifest.xml中Bundle節(jié)點,添加一個“initializedstate二install”的XML屬性。InitializedState是模塊初始狀態(tài),可能為Install或者Active,如果不指定默認為Active。或者在編輯器上直接取消“Startthebundlewhentheframeworkisactivated.”ManiifestJcmVDesignuoRE-lQJLlQJBG皂nerationInformationCon
9、figurationBundleType:HostBundle即ERUnHSpecifythegenerationinformationofbundle.Version:SimpleModlullegju-ajgjsName:StartLevel:UQ-sumIJU1Lazyactivatethebundleuntiloneclassofitisloaded.SimpleModuleActivator:SimpleModule.ActivatorCopyright:Category:Specifythedetailinformationofthisbundle.Author:ContactAd
10、dress:運行SimpleModuleShell,利用RemoteConsole查看UIOSP模塊狀態(tài),如下。此時,SimpleModule的狀態(tài)為Install狀態(tài)。Sample03:模塊激活器與晚激活1在Sample01基礎上,修改Mainfest.xml中Activator配置節(jié)點,添加“Policy=Lazy屬性。模塊有兩種激活方式:立即激活和晚激活。立即激活意味著模塊一旦被啟動,其激活器的Start方法便會調用;而晚激活則會將激活器Start方法的調用推遲到“第一次嘗試從該模塊加載一個類”時機。2運行SimpleModuleShell,通過RemoteConsole查看模塊運行情況
11、如下。3為SimpleModule添加一個ClassLoadingToActivate類,該類為測試類,不做任何實現(xiàn)。namespaceSimpleModulepublicclassClassLoadingToActivate4添加另一個模塊LoadClassModule,該模塊用于加載SimpleModule的ClassLoadingToActivate類,從而導致SimpleModule執(zhí)行激活。(1)修改Manifest.xml,將該模塊初始狀態(tài)變?yōu)镮nstall,即默認為不啟動;此外,添加對SimpleModule模塊的依賴。!一初始狀態(tài)更改為Install,即默認不啟動。-(2)在A
12、ctivator中,加載ClassLoadingToActivate類。namespaceLoadClassModulepublicclassActivator:IBundleActivatorpublicvoidStart(IBundleContextcontext)IBundlesimpleModule=context.GetBundleByName(SimpleModule);TypeclassLoadingToActivateType=simpleModule.LoadClass(SimpleModule.ClassLoadingToActivate);publicvoidStop(I
13、BundleContextcontext)/todo:5運行SimpleModuleShell,啟動RemoteConsole查看模塊運行情況如下。StateTypeBundleActiueHostLoadClassModuleActiueHostUIShe11.RemotingManagementActiueHostSimpleModuleActiueHostUlShell.UebSeruiceWrapperSeruicelistBundleRuntimeislaunched.6在RemoteConsole執(zhí)行“start2”,啟動LoadClassModule。一旦LoadClassMod
14、ule被啟動,它的激活器會從SimpleModule加載ClassLoadingToActivate類,從而觸發(fā)SimpleModule進入Active狀態(tài)。UIShell.OSGiRemoteConsolestart2Bundle:LoadClassModulestarted.Ctt21此時,在控制臺上,將打印“SimpleModuleisstarted.”。Sample04:模塊本地程序集1在Sample01基礎上,新建一個SimpleModuleLib類庫程序集,并添加一個SayHello類。namespaceSimpleModuleLibpublicclassSayHellopubli
15、cvoidHello(stringname)Console.WriteLine(string.Format(Hello,0.,name);2在SimpleModule中添加對SimpleModuleLib項目引用,并修改Manifest.xml的Runtime配置節(jié)點添加個“AssemblyPath=binSimpleModuleLib.dll/”子節(jié)點。?xmlversion=1.0encoding=utf-8?Bundlexmlns=urn:uiosp-bundle-manifest-2.0SymbolicName=SimpleModuleActivatorType=SimpleModul
16、e.Activator/RuntimeAssemblyPath=binSimpleModule.dll/!一添加模塊依賴的本地程序集。這樣做的目的:(1)使CLR類加載器能夠加載到該類;(2)支持類型晚加載。-AssemblyPath=binSimpleModuleLib.dll/Runtime/BundleRuntime配置節(jié)點定義了模塊運行過程中需要的類型信息Assembly配置節(jié)點定義了模塊的本地程序集。這樣的定義其目的是(1)是CLR類加載其能夠從不在標準文件目錄下的程序集加載到所需的類型;(2)支持從程序集晚加載所需類型。運行SimpleModuleShell,結果如下。5注意:如果
17、模塊引用了一個程序集,但是在Manifest.xml的Runtime沒有相關的本地程序集Assembly配置在類型加載時會發(fā)生類型查找不到的異常。6Assembly配置節(jié)點Path屬性是必填的項,它用于指定本地程序集相對于模塊根路徑的相對路徑。Sample05:模塊類型復用與依賴1在UIOSP中,模塊間可以實現(xiàn)類型復用。這個示例基于Sample04之上,實現(xiàn)了類型復用的示例。首先修改SimpleModule的Manifest.xml中的SimpleModuleLib本地程序集聲明,為該聲明一個Share屬性。Share屬性則表示該程序集是否能夠與其它Bundle復用。!一添加模塊依賴的本地程序
18、集。這樣做的目的:(1)使CLR類加載器能夠加載到該類;(2)支持類型晚加載。-!-Share用于聲明一個程序集是否可以被其它模塊復用。一或者通過編輯器添加一個如下程序集。ManifestJcmVDesiigni寸XBundleRuntimeConfigurationThecontEntofthissectionismadeupoftwosections:Assemblies:liststhErequiredassemblieswhichareonlyusedinthisbundhorsharedwithotherbundies.即:J-AJ即5匚.25匚CJ4XUJDependencies:
19、liststhEdependentbundlesandassemblies.2新建一個DependencyModule控制臺插件應用程序,然后瀏覽并引用SimpleModule模塊下的binSimpleModuleLib.dll程序集,需要注意的是,我們必須把這個引用的“復制本地”變?yōu)閒alse。如下圖。publicvoidStart(IBundleContextcontext)3在Manifest.xml添加對SimpleModule程序集的依賴。4在Activator使用SimpleModuleLib中的SayHello類。namespaceDependencyModulepubliccl
20、assActivator:IBundleActivatorpublicvoidStart(IBundleContextcontext)/todo:SimpleModuleLib.SayHellosayHello=newSimpleModuleLib.SayHello();sayHello.Hello(DependencyModule);/todo:5運行SimpleModuleShell,結果如下。 HYPERLINK file:/CUsers/lorry/Documents/VisualStudio2008/Prqjects/Samples/1Modularity/05BundleDep,.
21、,SimpleModuleisstarted.Hello,DependencModule.Pressentertoexit-Sample06:模塊啟動級別1模塊啟動級別在模塊Manifest.xml,用于設置模塊啟動順序、框架安全啟動、屏蔽異常模塊等。框架系統(tǒng)模塊啟動級別為1,級別越小優(yōu)先級越高。框架默認啟動級別為100,即小于等于100的模塊會被框架啟動,大于100則不會。2在Sample01基礎上,新建SimpleModulel和SimpleModule2控制臺插件應用程序。分別設置SimpleModule、SimpleModule1和SimpleModule2的啟動級別為2、3和4。4運
22、行SimpleModuleShell,其結果如下。Sample07:片段模塊1在Sample01基礎上創(chuàng)建一個FragmentModule的控制臺插件應用程序。片段模塊和宿主模塊相比,它不是一個正常的模塊,不能被啟動、停止,不能從片段模塊加載任何資源。片段模塊聲明的所有配置最終將合并到它指定的宿主模塊。如果我們需要依賴一個片段的程序集,那么我們聲明的依賴必須指向該片段模塊的宿主模塊。2刪除Activator.cs修改Manifest.xml文件將Activator配置節(jié)刪掉。3修改Manifest.Xml中Bundle配置節(jié)點,添加“HostBundleSymbolicName=SimpleM
23、odule屬性設置FragmentModule模塊的HostBundle是SimpleModule。ManifestJcmVDesiigniuore-jqjuqjdGenerationInformationConfigurationBundi亡Type:FragmentBundl亡SpecifythegenerationinformationofbundI巳SymbolicName(*):Version:FraqniienitModuVe即皂aj即Su.25uaj4xluName:FragmentModul亡HostBundleVersionRange:HostBundleSymbolicNa
24、me(*):SimpleModuleEditSpecifythedetailinformationofthisbundle.Author:Copyright:匚ategory:Description:ContactAddress:在FragmentModule添加一個SayHelloFromFragment類,如下。namespaceFragmentModulepublicclassSayHelloFromFragmentpublicvoidHello(stringname)Console.WriteLine(string.Format(Hello,0.,name);在SimpleModule
25、的Activator加載SayHelloFromFragment類型,并利用反射調用其Hello方法。namespaceSimpleModulepublicclassActivator:IBundleActivatorTypesayHelloFromFragmentType=context.Bundle.LoadClass(FragmentModule.SayHelloFromFragment);publicvoidStart(IBundleContextcontext)publicvoidStart(IBundleContextcontext)if(sayHelloFromFragmentType!=null)objectsayHello=System.Activator.CreateInstance(sayHelloFromFragmentType);MethodInfohelloMethod=sayHello.GetType().GetMethod(Hello);helloMethod.Invoke(sayHello,newobjectFragmentModule.);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 店鋪禮儀培訓
- 原發(fā)性巨球蛋白血癥腎損害的臨床護理
- 關于雙減政策的心得體會模版
- 1《小蝌蚪找媽媽》課件
- 新質生產力農業(yè)例子
- 醫(yī)學文獻翻譯核心要點解析
- 翡翠知識培訓
- 玉林消防考試題及答案大全
- 幼兒教師資格證考試試題及答案
- 馬克思主義哲學心得體會模版
- 3.5 鼓樂鏗鏘 課件高中音樂人音版(2019) 必修 音樂鑒賞
- 成人中心靜脈導管(CVC)堵塞風險評估及預防-2024團體標準
- 《聲聲慢(尋尋覓覓)》課件
- 2024年高中自主招生考試化學檢測試題
- HG∕T 3792-2014 交聯(lián)型氟樹脂涂料
- DL∕T 5342-2018 110kV~750kV架空輸電線路鐵塔組立施工工藝導則
- 門診部職責及管理制度(3篇)
- 榆神礦區(qū)郭家灘煤礦(700 萬噸-年)項目環(huán)評
- 中醫(yī)養(yǎng)生與亞健康防治 知到智慧樹網課答案
- 2024年浙江省杭州市濱江區(qū)中考二模數學試題
- 初一語文下冊全冊重點字詞
評論
0/150
提交評論