首页 > 代码库 > 插件的简单原理
插件的简单原理
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。