第二章《框架插件引擎设计》
插件式框架模型在本质上是一种应用工程的扩展。它将扩展功能通过插件方式实现,并使用框架进行集中统一管理,框架内部提供了宿主程序和插件之间以及插件与插件之间的通讯机制,插件式框架能够将扩展插件有机地集成到一个平台中并有效地协同工作。
插件式框架模型将一个程序的功能划分为相对独立的模块,并将模块以插件的形式存在。这些插件如同一堆功能积木块,在一个统一标准下被搭建,成为一个完整的、可无限扩充的应用系统。
通常地,一个插件式应用框架包括三个组成部分:
l 宿主程序:插件式框架的宿主程序是插件的依附对象,它包括三个部分,即主界面程序,以exe可执行文件形式存在,负责解析插件对象并将插件对象事件进行委托关联,以生成各种按钮、工具、工具条和菜单等UI形式的对象;插件引擎(Plugin Engine),它解析插件程序集,提取其中包含的插件类型信息并负责将其生成相应的插件对象,并将这些插件对象存放在插件集合中转交给界面程序处理;通讯契约,即平台与插件互相认可的一种标准,一般以接口(Interface)的形式存在,只有实现(Implement)了规定接口的类型对象才能被插件引擎认可为插件组件;
l 框架插件,插件类型保存在插件程序集中,可以被插件引擎解析和宿主程序使用,是插件式框架具体功能的承载者。
l 附加的组件库,这并不是插件式框架必要的一部分,它是为了辅助框架更好地运行而开发的各种工具集和类库,如通过包装的查询类,符号化类等;
图 2‑1为插件式框架一般结构图:
本章我们将首先了解ArcMap软件的插件机制内幕。尽管ArcMap是使用COM机制来实现插件式框架的,但这个过程可以给开发人员足够的启发。然后我们将介绍插件式GIS应用框架中的插件引擎设计、具体实现方法以及将使用到诸多.NET Framework2.0的高级知识,如属性、继承、接口、反射和集合等。
我们将首先介绍各个相关知识点,但它们并非入门内容。本书假设读者已经熟悉相关概念,缺乏的只是如何应用这些概念的技巧。在对这些知识点的深入讲解基础上,各章节将给出详细的应用框架实现代码。