ApplicationActivator 类

定义

提供用于激活基于清单的程序集的基类。

public ref class ApplicationActivator
[System.Runtime.InteropServices.ComVisible(true)]
public class ApplicationActivator
[<System.Runtime.InteropServices.ComVisible(true)>]
type ApplicationActivator = class
Public Class ApplicationActivator
继承
ApplicationActivator
属性

示例

下面的代码示例演示如何从基于清单的应用程序的当前 DomainManager 获取 ApplicationActivator 对象。

using System;
using System.Collections;
using System.Text;
using System.Security.Policy;
using System.Reflection;
using System.Security;
using System.Runtime.Hosting;

namespace ActivationContextSample
{
    public class Program : MarshalByRefObject
    {
        public static void Main(string[] args)
        {
            // Get the AppDomainManager from the current domain.
            AppDomainManager domainMgr = AppDomain.CurrentDomain.DomainManager;
            // Get the ApplicationActivator from the AppDomainManager.
            ApplicationActivator appActivator = domainMgr.ApplicationActivator;
            Console.WriteLine("Assembly qualified name from the application activator.");
            Console.WriteLine(appActivator.GetType().AssemblyQualifiedName);
            // Get the ActivationArguments from the SetupInformation property of the domain.
            ActivationArguments activationArgs = AppDomain.CurrentDomain.SetupInformation.ActivationArguments;
            // Get the ActivationContext from the ActivationArguments.
            ActivationContext actContext = activationArgs.ActivationContext;
            Console.WriteLine("The ActivationContext.Form property value is: " +
                activationArgs.ActivationContext.Form);
            Console.Read();
        }
    
        public void Run()
        {
            Main(new string[] { });
            Console.ReadLine();
        }
    }
}
Imports System.Collections
Imports System.Text
Imports System.Security.Policy
Imports System.Reflection
Imports System.Security
Imports System.Security.Permissions
Imports System.Runtime.Hosting



Public Class Program
    Inherits MarshalByRefObject

    <SecurityPermission(SecurityAction.LinkDemand, ControlDomainPolicy:=True)> _
    Public Shared Sub Main(ByVal args() As String)
        ' Get the AppDomainManager from the current domain.
        Dim domainMgr As AppDomainManager = AppDomain.CurrentDomain.DomainManager
        ' Get the ApplicationActivator from the AppDomainManager.
        Dim appActivator As ApplicationActivator = domainMgr.ApplicationActivator
        Console.WriteLine("Assembly qualified name from the application activator.")
        Console.WriteLine(appActivator.GetType().AssemblyQualifiedName)
        Dim ac As ActivationContext = AppDomain.CurrentDomain.ActivationContext
        ' Get the ActivationArguments from the SetupInformation property of the domain.
        Dim activationArgs As ActivationArguments = AppDomain.CurrentDomain.SetupInformation.ActivationArguments
        ' Get the ActivationContext from the ActivationArguments.
        Dim actContext As ActivationContext = activationArgs.ActivationContext
        Console.WriteLine("The ActivationContext.Form property value is: " + _
         activationArgs.ActivationContext.Form.ToString())
        Console.Read()

    End Sub

    <SecurityPermission(SecurityAction.LinkDemand, ControlDomainPolicy:=True)> _
    Public Sub Run()
        Main(New String() {})
        Console.ReadLine()

    End Sub
End Class

注解

每个AppDomain中都有一个类的ApplicationActivator指定实例,所有激活调用都路由到该实例。 AppDomainManager当前 AppDomain 的 可以为此提供自己的自定义ApplicationActivator。 如果未提供自定义 ApplicationActivator ,则会创建默认值 ApplicationActivator 的实例。

以下步骤描述了默认 CreateInstance 方法实现的行为:

  1. 检查要激活的加载项的 是否 ActivationContext 与当前域的 匹配 ActivationContext ;否则,继续执行步骤 2。 否则,执行程序集并返回包装在对象句柄中的结果。

  2. 在新的 AppDomain中激活外接程序。 执行以下步骤以使用 ActivationArguments 外接程序的 初始化新AppDomain

    1. 使用ActivationArguments包含外接程序的激活上下文的 对象创建新AppDomainSetup对象。

    2. CreateInstanceHelper调用 方法以使用 AppDomainSetup 对象创建新域。

    3. 方法 CreateInstanceHelper 调用 HostSecurityManager.DetermineApplicationTrust 方法以获取 ApplicationTrust 外接程序的对象。 IsApplicationTrustedToRun如果 属性返回 true,则执行外接程序。 否则, CreateInstanceHelper 将引发指示 PolicyException 无法获取执行权限的 。

    4. 如果外接程序受信任运行,则会为ActivationContext外接程序的 创建并配置一个新的 AppDomain ,并加载和执行外接程序。

    5. 将返回外接程序激活的结果,并包装在对象句柄中。

自定义激活器可以根据一组特定情况定制外接程序的激活。 例如,自定义激活器可以找到一个现有 AppDomain 激活此加载项,而不是每次创建新域。

以下步骤描述了在现有 AppDomain中激活加载项的自定义ApplicationActivator的行为:

  1. 自定义激活器查找域,该域与正在激活的加载项相同 ActivationContext

  2. ActivationContext如果从未在进程中看到 过 ,则自定义激活器会通过直接调用 CreateDomain 方法或将此活动委托给CreateInstanceHelper基类中的 来为此ActivationContext创建新AppDomain活动。

  3. 如果存在具有相同 ActivationContext的现有域,则激活器可以将方法调用委托给CreateInstanceApplicationActivator目标域中的 。 请注意,这将是对 ApplicationActivator 驻留在目标 AppDomain中的 的 的跨域调用。

构造函数

ApplicationActivator()

初始化 ApplicationActivator 类的新实例。

方法

CreateInstance(ActivationContext)

使用指定的激活上下文创建要激活的应用程序的实例。

CreateInstance(ActivationContext, String[])

使用指定的激活上下文和自定义激活数据创建要激活的应用程序实例。

CreateInstanceHelper(AppDomainSetup)

使用指定的 AppDomainSetup 对象创建应用程序的实例。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于