做winform程序,很多时候都需要用到插件式的,所以本人做了一个Demo,思路跟网上思路基本一致,现在共享出来如有需要的朋友可以下载。
原理很简单:
一:定义插件接口
二:实现插件接口并建立不同工项目,使其在生成时生成不同的DLL
三:主程序运行时根据接口名利用反射对插件目录的DLL进行加载,加载完成后便可以使用插件接口定义的方法或属性了。
下面上几张图,有兴趣的朋友可以先看看,觉得值得一看的朋友可以下载。
项目结构:
DefaultPlugin,PosPlugin两个项目均为插件,均实现了Iplugin接可
Iplugin接口
using
System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace WinDemo.Core
{
public interface Iplugin
{
PluginInfoAttribute PluginInfo
{ get ; set ; }
bool IsLoad
{
get ;
set ;
}
Image ModulePicture
{
get ;
}
Image ModulePictureEnter
{
get ;
}
Image ModulePictureClick
{
get ;
}
string ModuleName
{
get ;
}
Dictionary < string , EventHandler > ChildNodes
{
get ;
}
ILoadForm FormLoader
{
get ;
set ;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace WinDemo.Core
{
public interface Iplugin
{
PluginInfoAttribute PluginInfo
{ get ; set ; }
bool IsLoad
{
get ;
set ;
}
Image ModulePicture
{
get ;
}
Image ModulePictureEnter
{
get ;
}
Image ModulePictureClick
{
get ;
}
string ModuleName
{
get ;
}
Dictionary < string , EventHandler > ChildNodes
{
get ;
}
ILoadForm FormLoader
{
get ;
set ;
}
}
}
用于加载插件的类 PluginLoader
using
System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.IO;