ApplicationActivator Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
Esiste una singola istanza designata della ApplicationActivator classe in ognuna AppDomain a cui vengono instradate tutte le chiamate di attivazione. L'oggetto AppDomainManager per l'oggetto corrente AppDomain può fornire un proprio oggetto personalizzato ApplicationActivator a questo scopo. Se non viene specificata un'istanza personalizzata ApplicationActivator , viene creata un'istanza del valore predefinito ApplicationActivator .
I passaggi seguenti descrivono il comportamento dell'implementazione del metodo predefinito CreateInstance :
Controlla se l'oggetto ActivationContext del componente aggiuntivo da attivare corrisponde a quello ActivationContext del dominio corrente. In caso contrario, procede con il passaggio 2. In caso contrario, esegue l'assembly e restituisce il risultato di cui è stato eseguito il wrapping in un handle di oggetto.
Attiva il componente aggiuntivo in un nuovo AppDomainoggetto . I passaggi seguenti vengono eseguiti per inizializzare un nuovo AppDomain oggetto utilizzando ActivationArguments per il componente aggiuntivo.
Crea un nuovo AppDomainSetup oggetto utilizzando un ActivationArguments oggetto contenente il contesto di attivazione per il componente aggiuntivo.
Chiama il CreateInstanceHelper metodo per creare un nuovo dominio usando l'oggetto AppDomainSetup .
Il CreateInstanceHelper metodo chiama il HostSecurityManager.DetermineApplicationTrust metodo per acquisire un ApplicationTrust oggetto per il componente aggiuntivo. Se la IsApplicationTrustedToRun proprietà restituisce
true, viene eseguito il componente aggiuntivo. In caso contrario, CreateInstanceHelper genera un'eccezione PolicyException che indica che non è stato possibile acquisire l'autorizzazione di esecuzione.Se il componente aggiuntivo è attendibile per l'esecuzione, viene creato e configurato un nuovo AppDomain componente aggiuntivo per il ActivationContext componente aggiuntivo e il componente aggiuntivo viene caricato ed eseguito.
Il risultato dell'attivazione del componente aggiuntivo viene restituito, sottoposto a wrapping in un handle di oggetto.
Un attivatore personalizzato può adattare 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 invece di creare un nuovo dominio ogni volta.
I passaggi seguenti descrivono il comportamento di un componente aggiuntivo personalizzato ApplicationActivator che attiva un componente aggiuntivo in un oggetto esistente AppDomain:
L'attivatore personalizzato trova un dominio con lo stesso ActivationContext del componente aggiuntivo che viene attivato.
Se l'oggetto ActivationContext non è mai stato visto prima nel processo, l'attivatore personalizzato crea un nuovo AppDomain oggetto per questo ActivationContext oggetto chiamando direttamente il CreateDomain metodo o delegando questa attività a CreateInstanceHelper nella classe base.
Se è presente un dominio esistente con lo stesso ActivationContext, l'attivatore può delegare la CreateInstance chiamata al metodo a ApplicationActivator nel dominio di destinazione. Si noti che si tratta di una chiamata tra domini a un ApplicationActivator che risiede nella destinazione AppDomain.
Costruttori
| Nome | Descrizione |
|---|---|
| ApplicationActivator() |
Inizializza una nuova istanza della classe ApplicationActivator. |
Metodi
| Nome | Descrizione |
|---|---|
| CreateInstance(ActivationContext, String[]) |
Crea un'istanza dell'applicazione da attivare usando il contesto di attivazione specificato e i dati di attivazione personalizzati. |
| CreateInstance(ActivationContext) |
Crea un'istanza dell'applicazione da attivare utilizzando il contesto di attivazione specificato. |
| CreateInstanceHelper(AppDomainSetup) |
Crea un'istanza di un'applicazione utilizzando l'oggetto specificato AppDomainSetup . |
| 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 il Type dell'istanza corrente. (Ereditato da Object) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |