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 указывающее, что не удалось получить разрешение на выполнение.Если надстройка доверена для запуска, создается и настраивается ActivationContext новая AppDomain надстройка, а надстройка загружается и выполняется.
Результат активации надстройки возвращается, упакован в дескриптор объекта.
Настраиваемый активатор может адаптировать активацию надстройки к определенному набору обстоятельств. Например, пользовательский активатор может найти существующую AppDomain , чтобы активировать эту надстройку вместо создания нового домена каждый раз.
Ниже описано поведение настраиваемого, ApplicationActivator активающего надстройку в существующем AppDomain:
Пользовательский активатор находит домен, имеющий тот же ActivationContext , что и активируемая надстройка.
ActivationContext Если в процессе никогда не было видно, настраиваемый активатор создает новый AppDomain для этого ActivationContext путем вызова CreateDomain метода напрямую или делегирования этого действия в CreateInstanceHelper базовый класс.
Если есть существующий домен с тем же ActivationContextименем, активатор может делегировать CreateInstance вызов ApplicationActivator метода в целевом домене. Обратите внимание, что это будет междоменный вызов ApplicationActivator , который находится в целевом объекте AppDomain.
Конструкторы
| Имя | Описание |
|---|---|
| ApplicationActivator() |
Инициализирует новый экземпляр класса ApplicationActivator. |
Методы
| Имя | Описание |
|---|---|
| CreateInstance(ActivationContext, String[]) |
Создает экземпляр приложения для активации, используя указанный контекст активации и пользовательские данные активации. |
| CreateInstance(ActivationContext) |
Создает экземпляр приложения для активации с помощью указанного контекста активации. |
| CreateInstanceHelper(AppDomainSetup) |
Создает экземпляр приложения с помощью указанного AppDomainSetup объекта. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |