zoukankan      html  css  js  c++  java
  • Mussel使用系列(二):开始写我们的第一个Mussel插件项目

    Mussel插件项目都从AddinItem继承,AddinItem类是所有插件项目的基类,附合IAddinItem接口规范,我们先来看看IAddinItem接口的构成类图:



    上图是IAddinItem接口的全部方法与属性,从前三个属性中,我们不难看出Addin插件树的组成方式,可以想像的是AddinNode中自然还包插了IAddin的对像。

    Properties属性是插件加载时,从Addin配置文件中读取的对应的AddinItem的配置信息。而通过this属性可以轻松的访问到当前插件项目的子插件项目。

    之前讲过,Mussel插件可以被加载到不同的AppDomain中,为了证实这一说法,我们就来写个插件印证一下吧,建类一个类库项目(Mussel.Addins.AppDomainInfo),主要代码如下:


     1 [MusselType("AppDomainInfo")]    
     2 public class AppDomainInfo:AddinItem    
     3 {    
     4     protected override void OnInitialize()    
     5     {    
     6         base.OnInitialize();    
     7         Console.WriteLine("{0} AddinItem Created in {1}!",     
     8             Properties.FullName,    
     9             AppDomain.CurrentDomain.FriendlyName);    
    10     }    
    11 }   
    12 

    这段代码非常容易理解,我们从插件的基类继承,重载了OnInitialize方法进行插件的初始化,在初始化完成时,向控制台输出一行语句来确认自己所处的AppDomain。细心的同学可能发现,在这里用到了一个MusselType的标记,MusselType标记指示该类是一个需要被Mussel装载器识别的的类型,并且还指明了类型的标识。


    还记得在配置文件中,我们引入程序集时的那个 IsMusselAssembly 特性吗?Mussel加载器加载Addin配置文件中引入的程序集时,会先检查IsMusselAssembly特性,如果为"true",则会搜出程序集中带有MusselType标记的类型放入类型字典中,同时这个类型的标识亦会作为AddinItem配置时ClassKey的参照,据此,Mussel加载器便可以顺利的进行类型的构造了。


    插件类型做好后,我们来准备一个Mussel的加载程序,并在加载程序中向控制台输出自身的AppDomain信息,建立一个控制台程序(Mussel.Loader),基本代码如下:


     1 class Program    
     2 {    
     3     static void Main()    
     4     {    
     5         Console.WriteLine("Mussel.Loader Created in {0}!",  
     6             AppDomain.CurrentDomain.FriendlyName);    
     7         MusselService service = new MusselService();    
     8         service.Start();    
     9         Console.WriteLine("Service Started!");    
    10         Console.ReadLine();    
    11         service.Dispose();    
    12     }    
    13 }

    编译两个项目,在Mussel.Loader的执行文件夹下面新建一个文件夹“AppDomainInfo”,Copy“Mussel.Addins.AppDomainInfo.dll”到这个文件夹中,我们再建两个addin文件

    第一个插件配置文件

    第二个插件配置文件

    运行Mussel.Loader,会看到如下提示:



    点击下载此文件



  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/isuper/p/1239008.html
Copyright © 2011-2022 走看看