ApplicationActivator Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 :
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.
Ativa o suplemento em um novo AppDomain. As etapas a seguir são tomadas para inicializar um novo AppDomain usando o ActivationArguments suplemento.
Cria um novo AppDomainSetup objeto usando um ActivationArguments objeto que contém o contexto de ativação do suplemento.
Chama o CreateInstanceHelper método para criar um novo domínio usando o AppDomainSetup objeto.
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.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.
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:
O ativador personalizado localiza um domínio que tem o mesmo ActivationContext que o suplemento que está sendo ativado.
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.
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) |