您的位置:首页 > 其它

.Net中通过反射技术的应用----插件程序的开发入门

2012-03-25 17:39 483 查看
再开始之前,先学习基本基本的概念.

程序集:所有.Net类都是定义在某个Assembly(程序集)中的,.Net基本类是定义在mscorlib.dll中。exe也可以看做是类库,也可以引用。.net的exe也是Assembly,

.net中的exe和dll的区别就是exe中包含入口函数,其他没有区别,exe也可以当成dll那样引用、也可以反编译。

GAC:全局程序集缓存。公用的Assembly放到GAC中,我们新建一个项目,会发现引用的程序集,如system,找不到这个dll放在哪里,实质上系统已注册到全局GAC中

程序集包含描述它们自己的内部版本号和它们包含的所有数据和对象类型的详细信息的元数据。

程序集具有以下特点: 程序集作为 .exe 或 .dll 文件实现。 通过将程序集放在全局程序集缓存中,可在多个应用程序之间共享程序集。 要将程序集包含在全局程序集缓存中,必须对程序集进行强命名。

有关更多信息,请参见具有强名称的程序集。

程序集仅在需要时才加载到内存中。 可以使用反射以编程方式获取关于程序集的信息。

如果加载程序集的目的只是对其进行检查,应使用诸如 ReflectionOnlyLoadFrom 的方法。 可以在单个应用程序中使用相同程序集的两个版本

OK,编写以下代码

ChangeStyle

namespace PluginToChangeStyle
{
public class ChangeStyle:IEditor
{
public string Name
{
get
{
return "修改字体";
}
set
{
}
}
private TextBox txtBox;
public void Execute(TextBox txt)
{
txtBox = txt;
FrmSetFont frm = new FrmSetFont();
//通过委托方式在两个窗体之间传递内容
frm.setFont = SetTextBoxFont;
frm.ShowDialog();
}
/// <summary>
/// 设置字体、字号
/// </summary>
/// <param name="family"></param>
/// <param name="size"></param>
public void SetTextBoxFont(string family, float size)
{
txtBox.Font = new System.Drawing.Font(family, size);
}
}
}


编译PluginToChangeStyle项目,将PluginToChangeStyle.dll拷贝Notepad的Addins文件夹下.

再次运行Notepad时,我们编写的改变字体字号插件已经OK,并且可以正常使用





相关的代码下载:

http://115.com/file/ani80ym1#插件Demo.zip

代码写得很粗糙,主要是方便初学者的理解.主程序在扫描插件的时候,还需要考虑很多因素,也可以使用linq方式来获取.

这个插件还可以应用于MVC,实现补丁式开发.主要原理是将注册视图的代码分离,实现无缝补丁升级模式.

有空再再写.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐