Потоки
Домен приложения
Выполнение приложений .NET начинается с запуска .NET Framework. Это процесс со своими потоками, специальными атрибутами и правилами взаимодействия с другими процессами. Приложения .NET выполняются в ОДНОМ процессе. Для этих приложений процесс .NET Framework играет роль, аналогичную роли операционной системы при обеспечении выполнения процессов.
Выполняемые в процессе .NET Framework .NET-приложения также изолируются друг от друга. Средством изоляции .NET-приложений являются домены приложений.
Домен приложения изолирует (на логическом уровне) выполняемые приложения и используемые в его рамках ресурсы. В процессе .NET Framework может выполняться множества доменов приложений. При этом в рамках одного домена может выполняться множество потоков.
Функциональность и основные свойства домена приложения реализуются в классе System.AppDomain.
Таким образом, множество выполняемых .NET-приложений ограничены объектами – представителями класса System.AppDomain.
Домен обеспечивает выполнение приложения. Приложение может "провести инспекцию пограничной службы", то есть получить доступ к объекту-домену.
Пример. Приложение-инспектор. Получает ссылку на текущий домен приложения (свой собственный домен) и исследует некоторые свойства домена:
using System; namespace Domains_00 { class Class1 { static void Main(string[] args) { AppDomain appD1 = System.AppDomain.CurrentDomain; AppDomain appD2 = System.Threading.Thread.GetDomain(); if (AppDomain.ReferenceEquals(appD1,appD2)) Console.WriteLine ("The same! {0}, {1}.",appD1.FriendlyName,appD2.FriendlyName); else Console.WriteLine ("Different! {0}, {1}.",appD1.FriendlyName,appD2.FriendlyName); if (null != appD1.DynamicDirectory) Console.WriteLine("{0}",appD1.DynamicDirectory); else Console.WriteLine("No DynamicDirectory."); if (null != appD1.RelativeSearchPath) Console.WriteLine("{0}",appD1.RelativeSearchPath); else Console.WriteLine("No RelativeSearchPath."); } } }
Таким образом, ссылка на текущий домен может быть получена:
- как значение статического свойства System.AppDomain.CurrentDomain ;
- как результат выполнения метода System.Threading.Thread.GetDomain():
В рамках процесса (процесса .NET Framework) может быть создано множество доменов (объектов-доменов), причем новые домены можно создавать непосредственно в ходе выполнения .NET-приложения. Порождение новых доменов обеспечивается четверкой статических перегруженных методов – членов класса AppDomain с именем CreateDomain.
- Создается новый домен приложения с именем, заданным строкой-параметром:
public static AppDomain CreateDomain(string);
- Создается новый домен приложения с именем, заданным строкой-параметром, в рамках существующей политики безопасности:
public static AppDomain CreateDomain(string, Evidence);
- Создается новый домен приложения с использованием the specified name, evidence, and application domain setup information:
public static AppDomain CreateDomain(string, Evidence, AppDomainSetup);
- Создается новый домен приложения с именем, заданным строкой-параметром, в рамках существующей политики безопасности, указанием базового каталога, в котором проводит поиск распознаватель сборок, указанием базового каталога для поиска закрытых сборок, флагом управления загрузкой сборки в домен приложения:
public static AppDomain CreateDomain(string, Evidence, string, string, bool);