using IExtendServices;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 插件的简单原理
{
public class ExtendServices
{
private MenuStrip ms = null;
private RichTextBox txt = null;
public ExtendServices(MenuStrip ms, RichTextBox txt)
{
this.ms = ms;
this.txt = txt;
}
public void Service()
{
string[] plugFilesPath = Directory.GetFiles(Path.Combine(Application.StartupPath, "plugs"), "*.dll");
foreach (string itemPath in plugFilesPath)
{
Assembly ass = Assembly.LoadFrom(itemPath);
//获取所有的公共类型
Type[] assTypes = ass.GetExportedTypes();
//自定义的接口类型
Type itype = typeof(IExtendService);
foreach (Type itemtype in assTypes)
{
if (itemtype.IsPublic && itype.IsAssignableFrom(itemtype) && !itemtype.IsAbstract&&!itemtype.IsInterface)
{
IExtendService service = (IExtendService)Activator.CreateInstance(itemtype);
ToolStripMenuItem editItem = (ToolStripMenuItem)ms.Items[1];
ToolStripItem seritem = editItem.DropDownItems.Add(service.Name);
seritem.Tag = service;
seritem.Click += SerItemMethod;
}
}
}
}
private void SerItemMethod(object sender, EventArgs e)
{
ToolStripItem service = (ToolStripItem)sender;
((IExtendService)service.Tag).Service(txt);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CNotePadPlugs
{
public class ToASCII:IExtendServices.IExtendService
{
public string Name
{
get { return "ToASCII"; }
}
public void Service(System.Windows.Forms.RichTextBox txt)
{
string all = txt.Text;
string txtSelected = txt.SelectedText;
if (txtSelected == "")
txtSelected = all;
int index = txt.SelectionStart;//2
if (index == all.Length)
index = 0;
//0
string start = all.Substring(0, index);//2
//1
string upper = all.Substring(index, txtSelected.Length);
char[] chars = upper.ToCharArray();
upper = "";
foreach (char item in chars)
{
upper += (int)item;
}
//2
string end = txt.Text.Substring(index + txtSelected.Length);
txt.Text = start + upper + end;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IExtendServices
{
public interface IExtendService
{
string Name
{
get;
}
void Service(System.Windows.Forms.RichTextBox txt);
}
}
源文件:http://pan.baidu.com/s/1ntp0XxZ