- 热门文章:
- · 来自开源社区的声音: .NET vs JAVA
- · .net下分层架构系统的开发技术规范(2)
- · 在.NET 中模拟提交Post数据
- · 以武學的視角來戲說.NET程序員的倚天之術
- · XP方法学习总结及对小组开发的思考
- · 程序员的.NET时代(二)
- · 程序员的.NET时代(一)
- · 品味.NET巨著——书评《Microsoft .NET框架程序设计(修订版)》
- · 解决.NET(WebApplication)安装部署的不能选择安装路径的问题
- · Beta 1 到 Beta 2 改变详细列表(英文)Beta 1 to Beta 2 Changes
- · Microsoft Visual J#.NET (JSharp) Version 7.0 Beta 1 out
- · Microsoft Visual Studio.NET及Borland Delphi6初探
上一篇:创建插件框架(2) >>
创建插件框架(1)
标题:Create a Plug-In FrameWork
作者:Roy Osherove
译者:easyjoy
出处:MSDN Online,链接为
http://msdn.microsoft.com/asp.net/archive/default.aspx?pull=/library/en-us/dnaspp/html/pluginframework.asp
摘要:介绍如何为.Net应用程序添加插件支持,并提供一个框架例子。
代码下载:链接为
http://download.microsoft.com/download/7/2/e/72e64769-58d2-4a91-9686-a1a160bb1bc8/CreatePluginFramework.msi
目录
应用程序为什么需要插件框架
第一步:创建简单文本编辑器
第二步:创建Plug-In SDK
第三步:创建自己定制的插件
第四步:让应用程序找到新插件
第五步:用IConfigurationSectionHandler解析配置文件
实例化并调用插件
调用插件
总结
应用程序为什么需要插件框架
出于以下原因,人们通常为应用程序添加插件支持:
(1)在不需要重新编译和发布程序的情况下扩展功能;
(2)在不访问源代码的情况下添加新功能;
(3)应用程序业务规则变化频繁,或者经常有新的规则要加进来;
本文将构造一个简单的文本编辑器,该编辑器只有一个窗口。该程序唯一的功能就是在窗体中间的编辑框中显示一行文本。这个程序编好后,我们开始为它创建一个简单插件;这个插件读出编辑框中的文本,解析出其中的有效的EMail地址,然后返回该EMail。
如上所述,,这个例子中我们面临如下未知因素:
(1)应用程序本身如何找到插件;
(2)插件如何知道文本编辑框中的内容;
(3)如何激活插件;
第一步:创建简单文本编辑器
详细操作此处省略。下载的源代码中已经包含它。从此处开始,我假设你已经创建了这个简单程序。
第二步:创建Plug-In SDK
现在已经构造了程序,如何让应用程序与外边插件交流呢?怎样让它们交流呢?
解决方法是应用程序发布一个接口,所有的插件都要实现接口中的公共成员和方法。此处假设这个接口是IPlugin,所有想开发插件的开发人员都必须实现这个接口。这个接口位于共享库(shared library)中,应用程序和插件都用到它。下面是接口的定义:
public interface IPlugin
{
string Name{get;}
void PerformAction(IPluginContext context);
}
这段代码很容易懂,但是为什么要给PerformAction一个IPluginContext接口呢?原因在于这相对于直接把字符串当作参数进行传递,传递接口可以有更多的灵活性。目前,IPluginContext接口非常简单:
public interface IPluginContext
{
string CurrentDocumentText{get;set;}
}
现在所要做的就是在若干对象中实现接口,并把对象传递给插件,并获取结果。这使得将来可以不仅修改文本框,还可以修改任何对象。
第三步:创建自己定制的插件
现在要做的是
(1)创建一个单独的类库对象;
(2)创建一个类实现接口IPlugin;
(3)编译并放到主程序同一目录下;
public class EmailPlugin:IPlugin
{
public EmailPlugin()
{
}
// The single point of entry to our plugin
// Acepts an IPluginContext object
// which holds the current
// context of the running editor.
// It then parses the text found inside the editor
// and changes it to reflect any
// email addresses that are found.
public void PerformAction(IPluginContext context)
{
context.CurrentDocumentText=
ParseEmails(context.CurrentDocumentText);
}
// The name of the plugin as it will appear
// under the editor@#s "Plugins" menu
public string Name
{
get
{
return "Email Parsing Plugin";
}
}
// Parse the given string for any emails using the Regex Class
// and return a string containing only email addresses
private string ParseEmails(string text)
{
const string emailPattern= @"\w+@\w+\.\w+((\.\w+)*)?";
MatchCollection emails =
Regex.Matches(text,emailPattern,
RegexOptions.IgnoreCase);
StringBuilder emailString = new StringBuilder();
foreach(Match email in emails)
{
emailString.Append(email.Value + Environment.NewLine);
}
return emailString.ToString();
}
}
未完待续
剩下部分参见http://www.csdn.net/Develop/read_article.asp?id=26339
下一篇:来自开源社区的声音: .NET vs JAVA >>
相关文章:
- · .NET对软件安装的冲击
- · Microsoft Tech Ed
- · .NET 和 COM 之间的相互访问
- · 介绍.NET中的委派(一)
- · .NET架构的核心开发技术
- · 控制VC++.NET中WEB对话框的HTML元素属性
- · Borland Eyeing the Chasm Between Java and .NET
- · .Net 是未来的趋势, 为什么?
- · Microsoft .NET Development Platform的Linux版本(Mono)出现
- · 价值上千美元的Visual Studio.NET β2的培训
- · 使用 Microsoft.NET Frameworks 创建Windows应用程序
- · DataGrid连接Access的快速分页法(1)——需求与现状
- · 用Socket类构建网页下载器
- · COM与.NET的互操作(初级)
- · .NET 的对象关系持久化机制(1)
- · Websharp使用说明(8)
- · Websharp使用说明(7)
- · Websharp使用说明(6)
- · Websharp使用说明(5)
- · Websharp使用说明(4)
- · Websharp使用说明(3)
- · Websharp使用说明(2)
- · Websharp使用说明(1)
- · 使.NET命名空间符合标准
- · Repeater控件的分页问题
- · 用.Net构架你的系统(基类的搭建思路)
- · .NET断想
- · 常见 Datagrid 错误
- · .NET 数据访问架构指南(二)
- · .NET 数据访问架构指南(一)
- · 开发合作 Microsoft .NET 解决方案
- · Microsoft .NET 框架常见问题
- · Effective C#-Working with Strings
- · 使用WMI获得硬盘的信息
- · MSBuild入门
- · ADO.NET对象的构造(7)_OleDbParameter(中)
- · ADO.NET对象的构造(7)_OleDbParameter(上)
- · ADO.NET对象的构造(4)_DataColumn(续)
