对外接口:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 对外接口
{
public interface Ijiekou
{
string Name
{
get;
}
void Jiekou(TextBox textbox);
}
}
主程序:
string exppath=Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location);
string path=Path.Combine(exppath,"plugins");
//1.遍历plugins下的Dll文件
string[] files = Directory.GetFiles(path, "*.dll");
foreach (string item in files)
{
//2.加载反射
Assembly asm=null;
try
{
asm = Assembly.LoadFile(item);
}
catch (Exception ex)
{
}
if (asm != null)
{
//3.查找能外部访问的对像
Type[] types = asm.GetExportedTypes();
//得到接品的类型
Type type = typeof(Ijiekou);
foreach (Type item1 in types)
{
// MessageBox.Show(item1.Name);
//判断item1实现了type接口,并要以实例化
if (type.IsAssignableFrom(item1) && !item1.IsAbstract)
{
//创造对像
Ijiekou Ijk = (Ijiekou)Activator.CreateInstance(item1);
ToolStripItem ts = this.工具栏ToolStripMenuItem.DropDownItems.Add(Ijk.Name);
ts.Tag = Ijk;
ts.Click += new EventHandler(ts_Click);
}
}
}
}
插件制做
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using 对外接口;
using System.Windows.Forms;
namespace FontSize
{
public class Font:Ijiekou
{
public string Name
{
get { return "变成大写"; }
}
public void Jiekou(TextBox textbox)
{
textbox.Text = textbox.Text.ToUpper();
}
}
}