插件式架構設計中主要包括三個重要部分,宿主、插件協議以及插件實現。宿主是指使用插件的部分,該模塊可以是一個類,也可以是多個接口和類組成的模塊。插件協議是指宿主與插件之間的協議,宿主根據這個協議去調用插件的功能,插件根據這個協議去實現宿主需要的功能。插件實現就是基於插件協議實現的一個個具體插件。插件協議一般用接口體現。
2、Arcobjects中的Command-Tool插件架構
要梳理AO中的Command-Tool插件架構,就要找到對應的宿主、插件協議以及具體的插件實現。
當命令被創建的時候,會傳一個名爲hook的參數進來,該參數爲object類型,名稱翻譯過來叫鉤子。這個名稱挺形象的,相當於這個小小的插件鉤住了一個很龐大宿主對象,這樣在這個插件中,就可以使用宿主對象的任何資源了。
我們開發的時候,常用的宿主就是IMapControl、IPageLayoutControl,分別可以有AxMapControl.Object和AxPageLayoutControl.Object獲取。AO API已經爲我們實現了上百個命令或者工具。例如我們最常用的地圖放大工具、地圖全圖命令等。這些工具和命令我們都可以直接使用。
ESRI.ArcGIS.SystemUI.ITool myZoomInTool=new ControlsMapZoomInToolClass(); (myZoomInTool as ICommand).OnCreate(myAxMapControl.Object); (myAxMapControl.Object as IMapControl2). CurrentTool = myZoomInTool;
ESRI.ArcGIS.SystemUI.ICommand myFullCommand=new ControlsMapFullExtentCommandClass (); myFullCommand.OnCreate(myAxMapControl.Object); myFullCommand. OnClick();