可扩展体系结构的研究(四)--使用xml来定义插件体系结构
Xml是一种描述层次的很好的方式,而且xml定义通常是可被扩展的。
这就是我们定制xml文件的一个很重要的因素,可以被其他项目使用,可以用来扩展原来的xml格式。
定义xml的很重要目标就是所有的插件和核心组件可以共享相同的格式。但是与目标相反,插件应该能够应它们的需求而扩展格式;插件可能会需要在它们的xml文件中扩展接口。这种对接口的扩展必须在该插件的文档中有所描述。
一个xml文件的例子
我们从一个小的xml文件开始。我们可以从这样的小例子开始设计结构。
<AddIn name = "NCvs Core"
author = "Author"
copyright = "GPL"
url = "http://www.icsharpcode.net"
description = "NCvs core codon"
version = "1.0.0">
<Requires>
<codon path="/NCvs/Workspace"/>
</Requires>
<Runtime>
<Import assembly="NCvs.RepositoryView.dll"/>
</Runtime>
<Extension path = "/NCvs/Workspace/MainMenu">
<MenuItem id = "File" label = "&File">
<MenuItem id = "Separator1" label = "-"/>
<MenuItem id = "Exit"
label = "E&xit"
class = "NCvs.Gui.Commands.ExitCommand"/>
</MenuItem>
</Extension>
</AddIn>
现在开始考察给的这个xml,我们发现这个每个不同的块表达了一组概念。
第一块是根节点,它有一些属性可以被插件管理器使用(比如安装,移除,或者更新插件)。
“Requires”节点被用作一个特别的目的,它告诉插件加载器其子节点标明的路径必须是在树上存在的,从而可以确保这个codon(被插入树节点的元素,它不仅可以是扩展的程序,也可以是嵌入的资源文件,如图像、文本文件)被正确地加载。树可以用路径来遍历,它有一个根节点(对应‘/’),之后的目录构成树枝。不同于文件系统的路径,这里的codons(对应着文件系统中的file)还可以包含子目录。一个树节点不必包含一个(codon),它可以为空而仅仅是个目录。
下一个xml节点是Runtime。它存在的原因是可执行的代码需要存在在某个位置。Xml文件不应该实际包含可执行的程序,它只需定位到这个二进制的文件。尽可能多需要的程序集会被加载,通过列出超过一个的倒入节点。