给程序添加插件(来自MSDN)

本文介绍了如何利用.NET Framework的晚期绑定、反射、Fusion和代码访问安全性来实现应用程序的可扩展性,特别是通过插件和宏。通过示例代码,展示了如何在.NET应用程序中添加插件支持,包括加载、发现和激活插件的过程,以及如何通过反射发现和使用插件类型。此外,文章还讨论了版本控制、健壮性和安全注意事项,包括使用代码访问安全性(CAS)来保护插件的运行。
摘要由CSDN通过智能技术生成
 

让用户通过宏和插件向您的 .NET 应用程序添加功能

发布日期: 12/17/2004 | 更新日期: 12/17/2004

本文假设您熟悉 .NET 与 C#

下载本文的代码: Plug-Ins.exe (135KB)

概述

大多数用户应用程序都受益于可由其他开发人员扩展的能力。扩展一个用户已经很熟悉并针对它进行过培训的现有应用程序往往比从头开发更加简单和有效。因此,可扩展性会使您的应用程序更加吸引人。您可以通过支持插件和宏等功能来使应用程序具有可扩展性。使用 .NET Framework 可以轻松实现这一点,即使核心应用程序不是 .NET Framework 应用程序。在本文中,作者将描述 .NET Framework 的可扩展功能(包括晚期绑定和反射)及它们的使用方式,同时还介绍插件安全注意事项。

想像一下完美的文本编辑器是什么样子的。它启动时间不超过两秒,支持针对流行编程语言的上下文着色和自动缩进,支持多文档界面 (MDI) 以及很酷并且大受欢迎的选项卡式文档排列方式。构想这种完美的文本编辑器的问题在于完美只存在于旁观者的眼中。这些功能只是我对完美的文本编辑器的定义,其他人肯定会有不同的标准。也许完美的文本编辑器所能拥有的最重要的功能就是支持丰富的可扩展性,这样任何开发人员就可以使用他们需要的功能来扩展应用程序。

可扩展的文本编辑器可能支持创建自定义工具栏、菜单、宏,甚至是自定义文档类型。它应该允许我编写能挂钩到编辑进程的插件,以便添加自动完成、拼写检查及其他诸如此类的美妙功能。最后,完美的文本编辑器应该能让我用任何语言编写自己的插件(我个人的首选是 C#)。

诚然,我希望所用的每个应用程序都能按照这种方式来扩展。如果在某些地方编写少量代码就可以自定义自己喜欢的应用程序,那就再好不过。即使我做不到,我也知道其他人能够做到,我再通过从 Internet 下载来利用他们的扩展。这就是我开展此项活动以让所有开发人员都来编写可扩展应用程序的初衷。

理想的可扩展应用程序

许多应用程序都可以使用可插入代码来修改。实际上,整个 Microsoft® Office 应用程序套件都可以进行广泛地自定义,从而人们能够使用 Office 作为平台来编写完整的自定义应用程序。然而,即便有了所有这些可自定义能力,我还是为 Microsoft Word(一个我几乎天天使用的应用程序)编写了我的第一个插件。

原因很简单。Microsoft Office 的所有功能并不能完全符合我的标准,包括:

简单性。我想用已经很熟悉的非常简单的软件工具来操作我的可插入应用程序。

访问权限。我想让我的插件有权访问应用程序中内置的某些对象和功能的子集。这种访问权限应该是自然而然的,如同是我选择的编程语言的一部分。

编程语言。有时我想使用特别选择的编程语言。

能力。除了访问应用程序的文档对象模型 (DOM) 外,我还需要一个丰富的 API。

安全性。我需要能够下载其他人编写并且可以通过 Internet 下载的插件。我希望执行有潜在威胁或错误百出的组件而不必考虑系统的安全。

以上列出的事项虽然简短但近乎苛求。实际上,在 Microsoft .NET Framework 发行之前,这些标准对普通应用程序而言太过严格,是无法做到的。但现在,我可以向您展示如何使用 .NET Framework 来将所有这些可扩展性功能添加到您的托管和非托管应用程序中。

.NET Framework 可扩展性功能

可扩展性构建在晚期绑定之上,它是指在运行时而非编译时(更典型的情况)发现和执行代码的能力。在这几年中,有许多技术创新对晚期绑定做出了重大贡献,其中包括 DLL 和 COM API。.NET Framework 将晚期绑定的简单性提高到一个全新的层次。为加深理解,我们来看一个非常简单的代码示例。

图 1 显示了使用反射在托管对象中执行晚期绑定是如何的简单。如果您在 LateBinder.exe 内构建图 1 中的代码并运行它,则可以将任何程序集(例如从图 2 中的代码构建的程序集)的名称作为命令行参数传递给给它。LateBinder.exe 会反射程序集,并在该程序集中创建从 Form 派生的类的实例,并使它们成为其自己的 MDI 子类。.NET Framework 中的反射使晚期绑定大大简化。

反射是 .NET Framework 的基本工具之一,它促进了可扩展性应用程序的开发。它是我这里提到的可使应用程序可扩展的四种功能之一。

公共类型系统 使用 .NET Framework 一段时间之后,您可能就会开始认为使用公共类型系统 (CTS) 理所当然了。不过,它的确是使该平台中可扩展性变得如此简单的原因之一。CTS 定义了所有托管语言都必须遵循的部分面向对象特征,例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值