Condividi tramite


ApplicationActivator Classe

Definizione

Fornisce la classe base per l'attivazione di assembly basati su manifesto.

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

Esempio

Nell'esempio di codice seguente viene illustrato come ottenere un ApplicationActivator oggetto dall'oggetto corrente DomainManager per un'applicazione basata su 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

Commenti

È presente una singola istanza designata della ApplicationActivator classe in ognuna AppDomain a cui vengono indirizzate tutte le chiamate di attivazione. L'oggetto AppDomainManager per l'oggetto corrente AppDomain può fornire la propria personalizzata ApplicationActivator per questo scopo. Se non viene specificata una personalizzata ApplicationActivator , viene creata un'istanza del valore predefinito ApplicationActivator .

I passaggi seguenti descrivono il comportamento dell'implementazione predefinita CreateInstance del metodo:

  1. Verifica se l'oggetto del componente aggiuntivo da attivare corrisponde all'oggetto ActivationContextActivationContext del dominio corrente. In caso contrario, procedere al passaggio 2. In caso contrario, esegue l'assembly e restituisce il risultato eseguito in un handle oggetto.

  2. Attiva il componente aggiuntivo in un nuovo AppDomainoggetto . I passaggi seguenti vengono eseguiti per inizializzare un nuovo AppDomain uso ActivationArguments del componente aggiuntivo.

    1. Crea un nuovo AppDomainSetup oggetto usando un ActivationArguments oggetto contenente il contesto di attivazione per il componente aggiuntivo.

    2. Chiama il CreateInstanceHelper metodo per creare un nuovo dominio usando l'oggetto AppDomainSetup .

    3. Il CreateInstanceHelper metodo chiama il HostSecurityManager.DetermineApplicationTrust metodo per acquisire un ApplicationTrust oggetto per il componente aggiuntivo. Se la proprietà restituisce true, viene eseguito il IsApplicationTrustedToRun componente aggiuntivo. In caso contrario, CreateInstanceHelper genera un PolicyException oggetto che indica che non è stato possibile acquisire l'autorizzazione di esecuzione.

    4. Se il componente aggiuntivo è attendibile da eseguire, viene creato e configurato un nuovo AppDomain componente aggiuntivo per il ActivationContext componente aggiuntivo ed è stato caricato ed eseguito il componente aggiuntivo.

    5. Il risultato dell'attivazione del componente aggiuntivo viene restituito, eseguito il wrapping in un handle oggetto.

Un attivatore personalizzato può personalizzare l'attivazione di un componente aggiuntivo a un determinato set di circostanze. Ad esempio, un attivatore personalizzato potrebbe trovare un elemento esistente AppDomain per attivare questo componente aggiuntivo anziché creare un nuovo dominio ogni volta.

I passaggi seguenti descrivono il comportamento di un componente aggiuntivo personalizzato ApplicationActivator che attiva un componente aggiuntivo esistente AppDomain:

  1. L'attivazione personalizzata trova un dominio con lo stesso ActivationContext componente aggiuntivo attivato.

  2. Se l'oggetto ActivationContext non è mai stato visto prima nel processo, l'attivatore personalizzato crea un nuovo AppDomain oggetto per questo ActivationContext chiamando direttamente il CreateDomain metodo o delegando questa attività all'oggetto CreateInstanceHelper nella classe di base.

  3. Se esiste un dominio esistente con lo stesso ActivationContext, l'attivatore può delegare la CreateInstance chiamata ApplicationActivator al metodo nel dominio di destinazione. Si noti che si tratta di una chiamata tra domini a un ApplicationActivator oggetto che risiede nella destinazione AppDomain.

Costruttori

ApplicationActivator()

Inizializza una nuova istanza della classe ApplicationActivator.

Metodi

CreateInstance(ActivationContext)

Crea un'istanza dell'applicazione da attivare, utilizzando il contesto di attivazione specificato.

CreateInstance(ActivationContext, String[])

Crea un'istanza dell'applicazione da attivare usando il contesto di attivazione e i dati di attivazione personalizzati specificati.

CreateInstanceHelper(AppDomainSetup)

Crea un'istanza di un'applicazione utilizzando l'oggetto AppDomainSetup specificato.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a