外接程序管线方案
更新:2007 年 11 月
外接程序管线对象模型提供的灵活性可以让宿主应用程序和外接程序以下列方式交互操作:
向后兼容性。较高版本的宿主或外接程序可对它们的较低版本对等项进行操作。
隔离。可以将一个或多个外接程序移到宿主进程或一个独立进程中的应用程序域中。
共享。可以在多个通信管线中使用一个外接程序。
下面的插图显示了一个简单的通信管线及其管线段。
标准通信管线
向后兼容性
有两个方案演示了向后兼容性。
新宿主、旧外接程序
下面的插图显示了新宿主如何使用旧外接程序。
包含新宿主和旧外接程序的通信管线
在此向后兼容性方案中,新宿主(宿主 v2)可以使用旧外接程序(外接程序 v1),这是因为新宿主的外接程序端适配器(外接程序端适配器 v1->v2)将类型转换为旧外接程序可以理解的格式。
新外接程序(外接程序 v2)拥有自己的视图和适配器段,用来与新宿主进行通信。
旧宿主、新外接程序
下面的插图显示了旧宿主如何使用新外接程序。
包含旧宿主和新外接程序的通信管线
在此向后兼容性方案中,新外接程序(外接程序 v2)可以使用旧宿主(宿主 v1),这是因为旧外接程序的外接程序端适配器(外接程序端适配器 v2->v1)将类型转换为旧宿主可以理解的格式。
不同的隔离级别
可以使用 Activate 方法的合适重载在新的进程或应用程序域中激活外接程序。由于下列原因这种隔离可能是必需的:
处理宿主应用程序更改并且旧外接程序无法适应其新依赖项的情况。例如,当宿主应用程序升级到 .NET Framework 的新版本时,可能会发生这种情况。
让外接程序在它自己的进程内运行,从而获得可靠性。
为外接程序创建沙盒。例如,按照 AddInSecurityLevel 枚举所指定的,宿主应用程序和外接程序具有不同的信任级别。
下面的插图显示了具有两个外接程序的通信管线,其中一个外接程序位于独立进程内。在该插图中,OOP 表示独立进程。
包含独立外接程序的通信管线
在此方案中,管线开发人员有两种不同版本的协定和适配器:一种版本针对跨应用程序域通信而优化,另一版本针对跨进程通信而优化。外接程序和宿主都无需了解这些差异,因为它们使用相同的视图,而与协定和隔离级别无关。
共享的外接程序
可以将一个外接程序用于多个宿主,前提是该外接程序与这些宿主兼容。例如,可以使用一个共享的外接程序实现一个为宿主 Web 应用程序提供 Internet 搜索的工具栏。为电子邮件服务器或电子邮件客户端提供垃圾邮件筛选器和病毒防护的共享外接程序是另一个示例。
若要使外接程序对其新宿主进行操作,必须创建一个将外接程序视图转换为宿主的协定的新外接程序端适配器。
下面的插图说明了一个外接程序(外接程序 A)如何由两个宿主应用程序(宿主 A 和宿主 B)共享。
包含共享的外接程序的通信管线