Compartilhar via


ApplicationActivator Classe

Definição

Fornece a classe base para a ativação de assemblies baseados em manifesto.

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

Exemplos

O exemplo de código a seguir mostra como obter um ApplicationActivator objeto da corrente DomainManager para um aplicativo baseado em manifesto.

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

Comentários

Há uma única instância designada da classe em cada AppDomain uma para a ApplicationActivator qual todas as chamadas de ativação são roteadas. O AppDomainManager para o atual AppDomain pode fornecer seu próprio personalizado ApplicationActivator para essa finalidade. Se um personalizado ApplicationActivator não for fornecido, uma instância do padrão ApplicationActivator será criada.

As seguintes etapas descrevem o comportamento da implementação do método padrão CreateInstance :

  1. Verifica se o ActivationContext suplemento a ser ativado corresponde ao ActivationContext domínio atual; caso contrário, prossiga para a etapa 2. Caso contrário, executa o assembly e retorna o resultado encapsulado em um identificador de objeto.

  2. Ativa o suplemento em um novo AppDomain. As etapas a seguir são tomadas para inicializar um novo AppDomain usando o ActivationArguments suplemento.

    1. Cria um novo AppDomainSetup objeto usando um ActivationArguments objeto que contém o contexto de ativação do suplemento.

    2. Chama o CreateInstanceHelper método para criar um novo domínio usando o AppDomainSetup objeto.

    3. O CreateInstanceHelper método chama o HostSecurityManager.DetermineApplicationTrust método para adquirir um ApplicationTrust objeto para o suplemento. Se a IsApplicationTrustedToRun propriedade retornar true, o suplemento será executado. Caso contrário, CreateInstanceHelper gera uma PolicyException indicação de que a permissão de execução não pôde ser adquirida.

    4. Se o suplemento for confiável para ser executado, um novo AppDomain será criado e configurado para o ActivationContext suplemento e o suplemento será carregado e executado.

    5. O resultado da ativação do suplemento é retornado, encapsulado em um identificador de objeto.

Um ativador personalizado pode adaptar a ativação de um suplemento a um determinado conjunto de circunstâncias. Por exemplo, um ativador personalizado pode encontrar um existente AppDomain para ativar esse suplemento em vez de criar um novo domínio sempre.

As etapas a seguir descrevem o comportamento de um personalizado ApplicationActivator que ativa um suplemento em um existente AppDomain:

  1. O ativador personalizado localiza um domínio que tem o mesmo ActivationContext que o suplemento que está sendo ativado.

  2. Se nunca ActivationContext tiver sido visto antes no processo, o ativador personalizado criará um novo AppDomain para isso ActivationContext chamando o CreateDomain método diretamente ou delegando essa atividade para a CreateInstanceHelper classe base.

  3. Se houver um domínio existente com o mesmo ActivationContext, o ativador poderá delegar a CreateInstance chamada de método para o ApplicationActivator domínio de destino. Observe que essa seria uma chamada entre domínios para um ApplicationActivator que reside no destino AppDomain.

Construtores

ApplicationActivator()

Inicializa uma nova instância da classe ApplicationActivator.

Métodos

CreateInstance(ActivationContext)

Cria uma instância do aplicativo a ser ativado usando o contexto de ativação especificado.

CreateInstance(ActivationContext, String[])

Cria uma instância do aplicativo a ser ativado usando o contexto de ativação especificado e os dados de ativação personalizados.

CreateInstanceHelper(AppDomainSetup)

Cria uma instância de um aplicativo usando o objeto AppDomainSetup especificado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a