|
昨天写出了个基于Assembly的插件式结构模型,整体上有三个部分组成:
1)插件协议(IPlugin)
定义了作为插件必须实现的几个方法(见下面的代码),并通过这个接口来判断;另外包含了对插件的一些基本操作,定义在pluginUtil类中
using System;
using System.Data;
using System.Windows.Forms;
namespace PluginProtocol
{
/// <summary>
/// 插件服务接口
/// </summary>
public interface IPlugin
{
//创建主画面
System.Windows.Forms.Control CreateMainForm(DataSet dsPersonInfo, Form formOrder, object[] args);
//获取版本号
string GetVersion();
//获取关于信息
string GetAboutInfo();
//获取插件名称
string GetPluginName();
}
}
2)各种插件
和一般的类库开发没什么不同,只是增加了一个基于IPlugin的类,实现一些必须实现的接口,需要注意的是,CreateMainForm方法是接口的入口
3)主程序
要调用接口非常简单,只要两句话:
PluginProtocol.IPlugin p = PluginProtocol.PluginUtil.GetPluginObject(@"E:/开发/测试/pluginTest/Plugin1/bin/Debug/Plugin1.dll");
Control c = p.CreateMainForm(null, this, null);
--------------
以上模型可以实现动态加载插件,但卸载插件却碰到些问题,后来查了些资料,原来是Assembly本身不提供Unload方法的,不过,可以通过别的方法模拟这个Unload(不太爽:()
参考以下资料
(http://www.microsoft.com/china/msdn/archives/library/dncscol/html/csharp05162002.asp)
|
|