Aracılığıyla paylaş


ApplicationActivator Sınıf

Tanım

Bildirim tabanlı derlemelerin etkinleştirilmesi için temel sınıfı sağlar.

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

Örnekler

Aşağıdaki kod örneği, bildirim tabanlı bir ApplicationActivator uygulama için geçerli DomainManager bir nesnenin nasıl alındığı gösterilmektedir.

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

Açıklamalar

Her AppDomain birinde tüm etkinleştirme çağrılarının yönlendirildiği sınıfın ApplicationActivator belirlenmiş tek bir örneği vardır. AppDomainManager geçerli AppDomain için bu amaç için kendi özel ApplicationActivator sağlayabilir. Özel ApplicationActivator sağlanmazsa, varsayılanın ApplicationActivator bir örneği oluşturulur.

Aşağıdaki adımlar, varsayılan CreateInstance yöntem uygulamasının davranışını açıklar:

  1. Etkinleştirilecek eklentinin geçerli etki alanıyla ActivationContext eşleşip eşleşmediğini ActivationContext denetler; eşleşmiyorsa 2. adıma geçer. Aksi takdirde, derlemeyi yürütür ve bir nesne tutamacında sarmalanan sonucu döndürür.

  2. Eklentiyi yeni AppDomainbir sürümünde etkinleştirir. Eklenti için kullanarak ActivationArguments yeni AppDomain bir başlatma yapmak için aşağıdaki adımlar gerçekleştirilir.

    1. Eklentinin etkinleştirme bağlamını içeren bir nesne kullanarak yeni AppDomainSetup bir ActivationArguments nesne oluşturur.

    2. CreateInstanceHelper nesnesini kullanarak AppDomainSetup yeni bir etki alanı oluşturmak için yöntemini çağırır.

    3. CreateInstanceHelper yöntemi, eklenti için bir ApplicationTrust nesne almak için yöntemini çağırırHostSecurityManager.DetermineApplicationTrust. IsApplicationTrustedToRun özelliği döndürürsetrue, eklenti yürütülür. Aksi takdirde, CreateInstanceHelper yürütme izninin alınamadığını belirten bir PolicyException oluşturur.

    4. Eklentinin çalıştırılmasına güveniliyorsa, eklenti için ActivationContext yeni AppDomain bir yeni oluşturulur ve yapılandırılır ve eklenti yüklenir ve yürütülür.

    5. Eklentinin etkinleştirilmesinin sonucu döndürülür ve bir nesne tutamacında sarmalanır.

Özel bir etkinleştirici, bir eklentinin etkinleştirilmesini belirli bir durum kümesine uyarlayabilir. Örneğin, özel bir etkinleştirici her seferinde yeni bir etki alanı oluşturmak yerine bu eklentiyi etkinleştirmek için mevcut AppDomain bir etki alanı bulabilir.

Aşağıdaki adımlarda, var olan AppDomainbir ApplicationActivator eklentiyi etkinleştiren özel bir uygulamanın davranışı açıklanmaktadır:

  1. Özel etkinleştirici, etkinleştirilmekte olan eklentiyle aynı ActivationContext etki alanına sahip bir etki alanı bulur.

  2. ActivationContext işleminde daha önce hiç görülmediyse, özel etkinleştirici, yöntemini doğrudan çağırarak CreateDomain veya bu etkinliği CreateInstanceHelper temel sınıfta için temsilci olarak vererek bunun ActivationContext için yeni AppDomain bir oluşturur.

  3. aynı ActivationContextolan bir etki alanı varsa, etkinleştirici hedef etki alanındaki yöntemi çağrısına ApplicationActivator temsilci CreateInstance olarak atayabilir. Bunun hedefte AppDomainbulunan bir ApplicationActivator etki alanları arası çağrısı olacağını unutmayın.

Oluşturucular

Name Description
ApplicationActivator()

ApplicationActivator sınıfının yeni bir örneğini başlatır.

Yöntemler

Name Description
CreateInstance(ActivationContext, String[])

Belirtilen etkinleştirme bağlamını ve özel etkinleştirme verilerini kullanarak etkinleştirilecek uygulamanın bir örneğini oluşturur.

CreateInstance(ActivationContext)

Belirtilen etkinleştirme bağlamını kullanarak etkinleştirilecek uygulamanın bir örneğini oluşturur.

CreateInstanceHelper(AppDomainSetup)

Belirtilen AppDomainSetup nesneyi kullanarak bir uygulamanın örneğini oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır