为了在应用程序中引入新功能,需要对其进行重新编译和重新部署。为避免这些复杂过程,应用程序实现了扩展机制,使开发人员(包括第一方和第三方)能够创建与应用程序集成的其他应用程序。要支持这种扩展,最常用的方法是使用外接程序(也称为“加载项”和“插件”)。通过外接程序公开扩展性的实际应用程序示例包括:
Internet Explorer 加载项。
Windows Media Player 插件。
Visual Studio 外接程序。
例如,通过 Windows Media Player 外接程序模型,第三方开发人员可以实现“插件”,从而以各种方式对 Windows Media Player 进行扩展,包括为 Windows Media Player 本身不支持的媒体格式(例如 DVD、MP3)创建解码器和编码器,扩展音频效果和外观。尽管有一些实体和行为是所有外接程序模型共有的,但生成的每个外接程序模型都是为了公开某个应用程序的特有功能。
典型外接程序扩展解决方案的三大要素是“协定”、“外接程序”和“宿主应用程序”。协定定义了外接程序与宿主应用程序之间的两种集成方式:
外接程序集成宿主应用程序所实现的功能。
宿主应用程序公开供外接程序集成的功能。
要使外接程序能发挥作用,宿主应用程序需要在运行时找到并加载它们。因此,支持外接程序的应用程序需要额外执行以下操作:
发现:查找遵循宿主应用程序所支持的协定的外接程序。
激活:加载、运行外接程序并与之建立通信。
隔离:使用应用程序域或进程建立隔离边界,避免外接程序的潜在安全问题和执行问题对应用程序造成影响。
通信:通过调用方法和传递数据,允许外接程序和宿主应用程序跨过隔离边界相互通信。
生存期管理:以可预测的干净方式加载和卸载应用程序域和进程(请参见应用程序域概述)。
版本管理:确保在创建宿主应用程序或外接程序的新版本后,它们仍可进行通信。
总之,开发一个可靠的外接程序模型不是一项简单的任务。为此,.NET Framework 提供了一种用于生成外接程序模型的基础结构。