Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Создание новых доменов приложений программным образом



Напоминаем, что один процесс может обслуживать множество доменов приложений.

Хотя необходимость создавать домены приложений вручную в коде действительно

возникает крайне редко (а то и почти никогда), все-таки возможность делать это

существует и заключается она в использовании статического метода CreateDomain(). Как не трудно догадаться, метод AppDomain.CreateDomain() имеет несколько перегруженных

версий. Как минимум, ему требуется указывать дружественное имя, которым должен

обладать новый домен приложения, как показано ниже:

static void Main(string [ ] args)

{

// Создание нового домена приложения в текущем процессе.

AppDomain anotherAD = AppDomain.CreateDomain("SecondAppDomain");

PrintAllAssembliesInAppDomain(anotherAD);

Console.ReadLine();

}

Если теперь запустить приложение (рис. 2), можно увидеть, что сборки System.

Windows.Forms.dll, System.Drawing.dll и System.dll будут загружаться только в

используемый по умолчанию домен приложения. Это может показаться нелогичным

для тех, кто привык иметь дело с традиционными приложениями Win32 (потому что по

идее оба домена приложений должны иметь доступ к одному и тому же набору сборок).

Напоминаем, однако, что каждая сборка загружается в домен приложения, а не прямо

в сам процесс.

Рис. 2. Один процесс с двумя доменами приложений

Далее важно обратить внимание на то, в домен приложения SecondAppDomain будет

автоматически помещаться своя собственная копия mscorlib.dll, поскольку эта

важная сборка автоматически загружается CLR-средой для каждого домена приложения.

Отсюда возникает вопрос: как тогда программно загружать сборку в домен

приложения? Очень просто: с помощью метода AppDomain.Load() (или, в качестве

альтернативного варианта, посредством метода AppDomain.executeAssembly(), позволяющего загружать и выполнять код метода Main() сборки *.ехе).

Например, если скопировать сборку CarLibrary.dll в каталог приложения AppDomainManipulator.exe, тогда можно загрузить ее в домен приложения

SecondAppDomain следующим образом:

static void Main(string[] args)

{

// Загрузка CarLibrary.dll в новый домен приложения.

AppDomain anotherAD = AppDomain.CreateDomain("SecondAppDomain");

try

{

anotherAD.Load("CarLibrary");

PrintAllAssembliesInAppDomain(anotherAD);

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

Console.ReadLine();

}

Чтобы еще четче проиллюстрировать отношения между процессами, доменами

приложения и сборками, на рис. 3 приведена схема внутреннего устройства только что

созданного процесса AppDomainManipulator.exe.

Рис. 3. Внутреннее устройство процесса AppDomainManipulator.exe

На заметку! Во время отладки данного проекта (нажатием <F5>) в каждый домен приложения будет загружаться много дополнительных сборок, необходимых Visual Studio для выполнения процесса отладки. В случае просто запуска этого проекта (нажатием <Ctrl+F5>) будут отображаться только сборки, загружаемые конкретно в каждый домен приложения.





Дата публикования: 2015-07-22; Прочитано: 245 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...