RogerTong's Tech Space

文章书傲骨,程序写春秋

导航

Mussel使用系列(一):Mussel配置文件演示

Posted on 2008-07-09 15:42  RogerTong  阅读(680)  评论(1编辑  收藏  举报

在前面的文章中,我们说过,Mussel的内核是一个插件容器。Mussel本身不提供任何功能上的服务,所有的功能都由插件来提供。Mussel负责协调插件与插件、插件与容器以及容器与调用者之间的通信。


Mussel提供了一个装载器,这个在以后的文章中会讲到。装载器的Start方法调用时,装载器遍历Mussel程序集所在文件夹以及所有的子文件夹,搜寻 *.addin 的插件配置文件。在这里,我们先看一个addin文件的演示。


 1<?xml version="1.0" encoding="utf-8" ?>   
 2<Addin Name="Core" CreateNewDomain="true" DomainName="Core">   
 3  <ReferenceAssemblies>   
 4    <Reference AssemblyFile="icecs.dll"/>   
 5    <Reference AssemblyFile="Mussel.Communication.Contract.dll"  
 6                      IsMusselAssembly="true" />   
 7    <Reference AssemblyFile="Mussel.Communication.IceCommon.dll"/>   
 8    <Reference AssemblyFile="Mussel.Communication.IceServicePortal.dll"  
 9                      IsMusselAssembly="true"/>   
10  </ReferenceAssemblies>   
11  <AddinNode Path="/Mussel/Core">   
12    <AddinItem ClassKey="BasicFormatter" Name="BasicFormatter"/>   
13    <AddinItem ClassKey="ConnectionManager"/>   
14    <AddinItem ClassKey="FullServiceSiteFactory"/>   
15    <AddinItem ClassKey="IceServicePortal"   
16               ServiceSiteFactoryKey="/Mussel/Core,FullServiceSiteFactory"   
17               AdapterId="IceServicePortalAdapter"   
18               ObjectId="IceServicePortal"   
19               Endpoint="tcp -p 8755"   
20               ConnectionManager="/Mussel/Core,ConnectionManager"   
21               />   
22  </AddinNode>   
23</Addin>   
24

 在这里我们先解释一些概念性的东西: 

  1. Mussel的插件(Addin)是树状结构的,插件可以包含许多个加载节点(AddinNode),加载节点又可以包含许多个插件项目(AddinItem),而插件项目本身又可以是一个容器,可以包含许多子插件项目。
  2. 由于Mussel采用了树状的插件结构,所以加载节点及插件项目都有完全限定的路径。
  3. 插件项目的路径表示为:节点路径,[父级插件项目基本路径.]插件项目名称,例如:如果一个插件项目的完全路径为:/Mussel/UI/MainForm,MainMenu.FileMenu,则其装载节点是/Mussel/UI/MainForm,父级插件项目的完全路径是:/Mussel/UI/MainForm,MainMenu,父级项目的基本路径是MainMenu。


接下来,我们来看看配置文件中各个节点的具体含义,在Mussel插件配置文件中,一般会有以下一些元素:

  • /Addin,这是一个根元素,每个文件中只有一个。正如其名称一样,该元素表示其内部的XML内容为插件配置相关的信息,该元素有三个特性:
    • Name:插件的标识
    • CreateNewDomain:是否需要在新的AppDomain中加载插件。
    • DomainName:AppDomain的标识,如果多个配置文件的DomainName相同,则会被加载到同一个AppDomain中。
  • /Addin/ReferenceAssemblies,该元素标识其内部的XML内容为引用的程序集相关的信息。
  • /Addin/ReferenceAssemblies/Reference,该元素明确引用的具体程序集,有两个特性
    • AssemblyFile:程序集所在的相对路径(相对于插件文件所在的目录),如果前置"~/"字符,则相对于Mussel.Core程序集所在的目录。
    • IsMusselAssembly:该程序集是否为Mussel插件程序集,如果值为"ture",Mussel会尝试从程序集索并记录Mussel插件项目类型。
  • /Addin/AddinNode,该元素指示插件的装载节点,有一个特性:
    • Container:节点内部的容器,该容器明确元素内部的插件项目的父级插件项目位置。
  • /Addin/AddinNode/AddinItem,该元素设置具体的插件项目,包含两个基本的特性:
    • ClassKey:用于实例化插件项目的类型,对应插件代码中[MusselType(xxxx)]特性指定的类型标识。
    • Name:插件的名称标识,如果不设置的话,默认同ClassKey一致。