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,会看到如下提示:



    点击下载此文件



  • 相关阅读:
    个人永久性免费-Excel催化剂自定义函数实现带命名空间的xml文件元素信息提取
    拥有它从此看英文世界网页效率倍增,不会英文也能闯天下
    【功能迭代】Excel催化剂批量下载邮件信息及正文续篇
    个人永久性免费-Excel催化剂第130波批量下载邮件信息及正文
    [功能发布]Excel集成网页控件,内嵌于Excel单元格区域,可加载任意网页
    使用VBA时不妨借力Excel催化剂的能力,让你的开发更加轻松便捷
    介绍一个不错的轮子:MoreLINQ,原生LINQ增强,尤其适用于数据ETL/数据分析领域。
    [功能更新]PBI催化剂新增批量DAX表达式格式化及模型和报表层度量值使用状况分析
    [网页采集实战]使用Excel催化剂趴一下公众号里的各种软文,越是大号越没底线
    【综合实战】使用Excel催化剂低成本快速轻松搭建复杂灵活的高响应的业务系统-EasyShu激活码发放过程
  • 原文地址:https://www.cnblogs.com/isuper/p/1239008.html
Copyright © 2011-2022 走看看