外接程序的激活
在已经使用发现方法并获得指定宿主视图的外接程序标记集合后,可以通过使用外接程序的标记来激活该集合中的外接程序,标记是由 AddInToken 对象表示的。 有关如何发现可在您的系统上使用的外接程序的更多信息,请参见外接程序的发现。
在对 AddInToken 对象使用 Activate 方法重载时,可以指定下列激活选项:
外接程序加载到的应用程序域。
向为外接程序创建的应用程序域授予的安全信任级别或权限集。
在其中激活外接程序的外部进程。 这是一个高级外接程序开发选项。
Activate 方法返回外接程序的宿主视图;宿主应用程序然后可以按协定中的定义调用方法。 宿主应用程序可以通过使用 AddInController 类关闭外接程序来控制外接程序的生存期。 当不再对外接程序进行引用时,宿主应用程序还可以让垃圾回收器来回收外接程序。
激活
通常,宿主应用程序使宿主和外接程序在不同的应用程序域中运行,并且每个外接程序一个应用程序域。 这样便使外接程序可以在与宿主及其他外接程序隔离的上下文中运行。 这种隔离可以防止冲突并支持外接程序的版本控制。
由于外接程序在其自己的应用程序域中,因此您可以在它自己的环境中测试它,还可以测试管线的外接程序端。 外接程序适配器、协定及外接程序视图管线段与外接程序加载到同一个应用程序域内。 外接程序所需的任何其他程序集也全都加载到外接程序的应用程序域中。
激活外接程序时,宿主应用程序通常使用 Activate 方法重载,该方法重载采用指定的安全级别并自动为外接程序创建一个应用程序域。 可以为该安全级别指定 AddInSecurityLevel 或 PermissionSet。 当 Activate 方法为外接程序创建一个应用程序域时,会将该应用程序域的配置文件设置为 addinassemblyname.config(如果存在该文件)。
若要获得更精细的控制或者要集中外接程序,可以使用 AddInToken.Activate 方法的重载指定一个现有的应用程序域来加载外接程序。 如果指定一个现有的应用程序域,就可以轻松地与其他外接程序共享资源、安全上下文和区域性信息。
应该考虑将要应用于外接程序的应用程序域的安全上下文。 例如,宿主应用程序可以在完全信任下运行,但它可能需要以较低权限运行外接程序。 可以使用 Activate 方法的重载来指定具有 AddInSecurityLevel 枚举的安全区域。 这些安全区域包括 FullTrust、Host、Intranet 或 Internet。 安全区域的适当权限将应用于在该应用程序域内运行的代码。 可用于这些安全区域的权限取决于 .NET Framework 的现有安全设置。
如果您不想将权限用于安全区域,可以使用 Activate 方法的重载提供您自己的 PermissionSet 对象。
可以使用 Activate 方法的重载为外接程序创建一个外部进程,或者将外接程序附加到一个现有的外部进程(创建该进程是为了承载外接程序)。 这些重载使用 AddInProcess 和 AddInEnvironment 类。 有关在外部进程中激活外接程序的更多信息,请参见如何:使用不同的隔离和安全级别激活外接程序。。
外接程序生存期的控制
AddInController 类提供用于执行下列外接程序任务的方法:
关闭外接程序。
获取外接程序的应用程序域。
获取外接程序的标记以便在以后进行激活。
获取用于外部进程激活的 AddInEnvironment 对象。
使用 GetAddInController 方法获得指定外接程序的控制器。
Shutdown 方法处理关闭一个外接程序所需的详细信息。 这包括了解外接程序的加载位置、其应用程序域以及可能运行外接程序的外部进程。 如果应用程序域是自动创建的,则此方法会卸载该应用程序域。 如果外接程序是在指定的应用程序域中激活的,则远程协定对象上的生存期服务将超时,使该应用程序域处于已加载状态。 在释放该协定对象时,便可以通过垃圾回收来回收外接程序。
示例
下面的示例在自动创建的应用程序域中激活一个具有指定安全级别的外接程序。
'Ask the user which add-in they would like to use.
Dim selectedToken As AddInToken = ChooseAddIn(tokens)
'Activate the selected AddInToken in a new
'application domain with the Internet trust level.
Dim CalcAddIn As Calculator = selectedToken.Activate(Of Calculator)(AddInSecurityLevel.Internet)
'Run the add-in using a custom method.
RunCalculator(CalcAddIn)
//Ask the user which add-in they would like to use.
AddInToken selectedToken = ChooseAddIn(tokens);
//Activate the selected AddInToken in a new
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate<Calculator>(AddInSecurityLevel.Internet);
//Run the add-in using a custom method.
RunCalculator(CalcAddIn);