代码改变世界

Dynamic Plugins Manager (三) Demo

2008-12-11 12:26  Timothy Ye  阅读(335)  评论(0编辑  收藏  举报
下面来演示一下Plugins Manager,先看看我们事先做好的Interface和两个具体实现的插件.

   Interface,接口定义:
  
程序代码 程序代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Component
{
    public interface IComponent
    {
        string Invoke();
    }
}
  


    整个接口,只声明了一个Invoke方法,这也是具体的插件必须实现的一个方法。

   第一个插件类 class1.cs
    
程序代码 程序代码

    namespace Component
{

    public class Class1 : MarshalByRefObject,IComponent
    {
        string message = string.Empty;
        int number;
        float number2;

        public Class1(string input, int num)
        {
            message = input;
            number = num;
            number2 = 0;
        }

        public Class1(int num1, float num2)
        {
            message = "none";
            number = num1;
            number2 = num2;
        }

        public string Invoke()
        {
            return "This is TestLibrary. member---message:" + message + "number:" + number.ToString() + "number2:" +number2.ToString();
        }
    }
}

    
    


    第二个插件类 class2.cs
    
程序代码 程序代码

namespace Component
{
    public class Class2 : MarshalByRefObject,IComponent
    {
        public Class2()
        {
        }

        public string Invoke()
        {
            return "This is TestLibrary2 without construct param";
        }
    }
}

    



    这里我们看到区别,第一个插件,需要构造函数,第二个插件不需要构造函数,所以在配置文件中,第二个插件可以关闭掉ConstructParam这个节点。

   下面我们将Class1.cs编译好,放到插件目录中,改名为TestLibrary.dll,将Class2.cs直接改名为TestLibrary2.cs,放到插件目录中。
   演示的目的:插件1需要在加载时,构造初始化函数,而插件2不需要。
               插件1,是已经编译好的dll,不需要实时编译,但是插件2需要。

   下面是测试的截图

   1.插件目录,一个放入编译好的dll,一个放入.cs源码
  


     2.启动测试程序,看到2个插件都已经被加载



     3.此时,再查看插件的目录,我们会看到Plugin Manager为我们编译,并生成的插件2的dll




   4.查看插件的日志记录



   5.插件的调用
   选中TestLibrary,点击Invoke按钮:



  选中TestLibrary2,点击Invoke按钮:



   6.插件的动态卸载和发布
     a.动态卸载,可以直接使用Plugins Manager的UnloadPluginByName直接通过程序调用卸载。也可以手动打开插件的配置文件,将EnablePlugin设置为False
       b.动态发布,直接在插件目录中,建立一个新的子目录,然后将插件的dll和xml配置文件直接拷入即可
     关于第6点,这些功能的演示,截图比较麻烦,大家可以直接使用测试程序测试即可。