对插件开发不太熟,这个例子是最基础的一个
下面直接贴后台代码
记事本Form1中
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Reflection; using System.IO; using 记事本.IEditPlus; namespace 记事本 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //浏览某个路径下的文件夹,寻找dll文件 //找到当前程序所在的目录并且和这个程序对应的文件夹拼接起来 string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "LibOne"); //从这个路径中获取所有的dll文件 string[] files = Directory.GetFiles(path, "*.dll"); //遍历所有的文件 for (int i = 0; i < files.Length; i++) { //获取这个路径下的所有的程序集 Assembly ass= Assembly.LoadFile(files[i]); Type Eidt= typeof(IEditp);//获取这个接口的Type //获取这个程序集中公共的类型 Type[] tps = ass.GetExportedTypes(); //遍历所有公共的类型 for (int j = 0; j < tps.Length; j++) { //tps[i]能不能赋值给接口对象,并且不能是抽象 if (Eidt.IsAssignableFrom(tps[j])&&!tps[j].IsAbstract) { //创建接口类型的实例,强转了 IEditp iedit= (IEditp)Activator.CreateInstance(tps[j]); //把插件的名字获取到 string name= iedit.Name; //把插件功能的名字添加到菜单中 ToolStripItem tsi= tsm.DropDownItems.Add(name);//主程序的菜单上就有这个功能的名字了 //把接口存到该菜单的tag中 tsi.Tag = iedit; //注册一个点击事件 tsi.Click += new EventHandler(tsi_Click); } } } } void tsi_Click(object sender, EventArgs e) { //谁触发了这个方法 ToolStripItem tsi= sender as ToolStripItem; //从tag属性中获取接口 IEditp edi= tsi.Tag as IEditp; //获取接口的方法,把文本框传进去,并且接收一下 textBox1.Text= edi.ConvertString(textBox1); } } }
记事本.ConvertStringToupp中
using System; using System.Collections.Generic; using System.Linq; using System.Text; using 记事本.IEditPlus; namespace 记事本.ConvertStringToupp { public class ConvertToUpp:IEditp { public string ConvertString(System.Windows.Forms.TextBox tb) { return tb.Text.ToUpper(); } public string Name { get { return "转大写"; } } } }
记事本.IEditPlus中
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace 记事本.IEditPlus { public interface IEditp { string Name { get; } string ConvertString(TextBox tb); } }