Compartir a través de


ApplicationActivator Clase

Definición

Proporciona la clase base para la activación de ensamblados basados en manifiestos.

public ref class ApplicationActivator
[System.Runtime.InteropServices.ComVisible(true)]
public class ApplicationActivator
[<System.Runtime.InteropServices.ComVisible(true)>]
type ApplicationActivator = class
Public Class ApplicationActivator
Herencia
ApplicationActivator
Atributos

Ejemplos

En el ejemplo de código siguiente se muestra cómo obtener un ApplicationActivator objeto del actual DomainManager para una aplicación basada en manifiesto.

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

Comentarios

Hay una única instancia designada de la ApplicationActivator clase en cada AppDomain una de las cuales se enrutan todas las llamadas de activación. para AppDomainManager el actual AppDomain puede proporcionar su propio personalizado ApplicationActivator para este fin. Si no se proporciona un personalizado ApplicationActivator , se crea una instancia del valor predeterminado ApplicationActivator .

En los pasos siguientes se describe el comportamiento de la implementación del método predeterminado CreateInstance :

  1. Comprueba si el ActivationContext elemento del complemento que se va a activar coincide con el ActivationContext del dominio actual; si no es así, continúa con el paso 2. De lo contrario, ejecuta el ensamblado y devuelve el resultado encapsulado en un identificador de objeto.

  2. Activa el complemento en un nuevo AppDomain. Se realizan los pasos siguientes para inicializar un nuevo AppDomain mediante para ActivationArguments el complemento.

    1. Crea un nuevo AppDomainSetup objeto mediante un ActivationArguments objeto que contiene el contexto de activación del complemento.

    2. Llama al CreateInstanceHelper método para crear un dominio mediante el AppDomainSetup objeto .

    3. El CreateInstanceHelper método llama al HostSecurityManager.DetermineApplicationTrust método para adquirir un ApplicationTrust objeto para el complemento. Si la IsApplicationTrustedToRun propiedad devuelve true, se ejecuta el complemento. Si no es así, CreateInstanceHelper produce un PolicyException valor que indica que no se pudo adquirir el permiso de ejecución.

    4. Si el complemento es de confianza para ejecutarse, se crea y configura un nuevo AppDomain para el ActivationContext de del complemento, y el complemento se carga y se ejecuta.

    5. Se devuelve el resultado de la activación del complemento, encapsulado en un identificador de objeto.

Un activador personalizado puede adaptar la activación de un complemento a un conjunto determinado de circunstancias. Por ejemplo, un activador personalizado podría encontrar un existente AppDomain para activar este complemento en lugar de crear un dominio nuevo cada vez.

En los pasos siguientes se describe el comportamiento de un personalizado ApplicationActivator que activa un complemento en un existente AppDomain:

  1. El activador personalizado busca un dominio que tenga el mismo ActivationContext que el complemento que se está activando.

  2. ActivationContext Si nunca se ha visto antes en el proceso, el activador personalizado crea un nuevo AppDomain para esto ActivationContext mediante una llamada al CreateDomain método directamente o al delegar esta actividad en en CreateInstanceHelper la clase base.

  3. Si hay un dominio existente con el mismo ActivationContext, el activador puede delegar la CreateInstance llamada de método a en ApplicationActivator el dominio de destino. Tenga en cuenta que se trata de una llamada entre dominios a un ApplicationActivator que reside en el destino AppDomain.

Constructores

ApplicationActivator()

Inicializa una nueva instancia de la clase ApplicationActivator.

Métodos

CreateInstance(ActivationContext)

Crea una instancia de la aplicación que se va a activar, utilizando el contexto de activación especificado.

CreateInstance(ActivationContext, String[])

Crea una instancia de la aplicación que se va a activar utilizando el contexto de activación especificado y los datos de activación personalizados.

CreateInstanceHelper(AppDomainSetup)

Crea una instancia de una aplicación utilizando el objeto AppDomainSetup especificado.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a