Когда я буду использовать домен приложения?


Я довольно новичок в рефлексии, и мне было интересно, для чего я буду использовать (второй) домен приложения? Какое практическое применение можно найти в бизнес-приложении?

3 7

3 ответа:

Существует множество применений. Вторичный домен приложений может обеспечить степень изоляции, аналогичную изоляции процессов, обеспечиваемой операционной системой.

Одно практическое применение, для которого я его использовал, - это динамическая загрузка библиотек DLL" plug-in". Я хотел бы поддерживать сканирование каталога на наличие DLL при запуске основного исполняемого файла, загрузку их и проверку их типов, чтобы увидеть, реализован ли какой-либо конкретный интерфейс (т. е. контракт плагина). Без создания вторичного домена приложения у вас нет способ выгрузки библиотеки DLL / сборки, которая может не иметь типов, реализующих искомый интерфейс. Вместо того, чтобы носить с собой дополнительные сборки и типы и т. д. в процессе можно создать вторичный домен приложения, загрузить сборку и изучить типы. Когда вы закончите, вы можете избавиться от вторичного домена приложений и, следовательно, от ваших типов.

99% времени я бы избегал дополнительных доменов приложений. По существу, это отдельные процессы. Вы должны маршалировать данные из одного домена в другой, что добавляет сложности и проблем с производительностью.

Люди пытались использовать домены приложений, чтобы обойти проблему, из-за которой нельзя выгружать сборки после их загрузки в домен приложений. Таким образом, вы создаете второй домен приложения, в который можно загрузить динамические сборки, а затем выгрузить весь домен приложения, чтобы освободить связанную память. с Ассамблеей.

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

Домены приложений полезны, когда необходимо иметь несколько экземпляров одного элемента. Например, у вас есть сборка, которая реализует протокол связи с некоторым устройством, и эта сборка использует синглеты. Если вы хотите создать несколько экземпляров этого класса (чтобы общаться с несколькими устройствами) и вы хотите, чтобы экземпляры не мешали друг другу, то домены приложений идеально подходят для этой цели.

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