ApplicationActivator Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет базовый класс для активации сборок на основе манифестов.
public ref class ApplicationActivator
[System.Runtime.InteropServices.ComVisible(true)]
public class ApplicationActivator
[<System.Runtime.InteropServices.ComVisible(true)>]
type ApplicationActivator = class
Public Class ApplicationActivator
- Наследование
-
ApplicationActivator
- Атрибуты
Примеры
В следующем примере кода показано, как получить ApplicationActivator объект из текущего DomainManager для приложения на основе манифеста.
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
Комментарии
В каждом из них есть один назначенный ApplicationActivator экземпляр класса , в который AppDomain направляются все вызовы активации. Для AppDomainManager текущего AppDomain может предоставлять собственные пользовательские ApplicationActivator для этой цели. Если пользовательский ApplicationActivator параметр не указан, создается экземпляр по умолчанию ApplicationActivator .
Ниже описано поведение реализации метода по умолчанию CreateInstance .
Проверяет, ActivationContext совпадает ли активируемая надстройка с текущим ActivationContext доменом; если нет, переходит к шагу 2. В противном случае выполняет сборку и возвращает результат, заключенный в дескриптор объекта.
Активирует надстройку в новом AppDomainобъекте . Чтобы инициализировать новый AppDomain объект с помощью ActivationArguments для надстройки, выполните следующие действия.
Создает новый AppDomainSetup объект, используя ActivationArguments объект , содержащий контекст активации для надстройки.
CreateInstanceHelper Вызывает метод для создания нового домена с помощью AppDomainSetup объекта .
Метод CreateInstanceHelper вызывает HostSecurityManager.DetermineApplicationTrust метод для получения ApplicationTrust объекта для надстройки. IsApplicationTrustedToRun Если свойство возвращает
true
значение , выполняется надстройка. В противном случае вызывает исключение PolicyException , CreateInstanceHelper указывающее, что не удалось получить разрешение на выполнение.Если надстройка является доверенной для запуска, создается и настраивается новая AppDomainActivationContext надстройка, а затем она загружается и выполняется.
Возвращается результат активации надстройки, заключенный в дескриптор объекта.
Настраиваемый активатор может адаптировать активацию надстройки к определенному набору обстоятельств. Например, настраиваемый активатор может найти существующий AppDomain для активации этой надстройки, а не создавать новый домен каждый раз.
Ниже описано поведение пользовательской ApplicationActivator функции, которая активирует надстройку в существующей AppDomain:
Настраиваемый активатор находит домен, имеющий тот же ActivationContext , что и активируемая надстройка.
Если объект ActivationContext никогда не виделся в процессе, настраиваемый активатор создает новый AppDomain для этого ActivationContext , вызывая CreateDomain метод напрямую или делегируя это действие в базовом CreateInstanceHelper классе.
Если имеется домен с таким же ActivationContext, активатор может делегировать CreateInstance вызов ApplicationActivator метода в целевом домене. Обратите внимание, что это будет междоменный вызов объекта ApplicationActivator , который находится в целевом объекте AppDomain.
Конструкторы
ApplicationActivator() |
Инициализирует новый экземпляр класса ApplicationActivator. |
Методы
CreateInstance(ActivationContext) |
Создает экземпляр приложения, которое должно быть активировано, используя указанный контекст активации. |
CreateInstance(ActivationContext, String[]) |
Создает экземпляр приложения для активации, используя указанный контекст активации и пользовательские данные активации. |
CreateInstanceHelper(AppDomainSetup) |
Создает экземпляр приложения с помощью указанного объекта AppDomainSetup. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |