Когда я буду использовать AppDomain? - PullRequest
7 голосов
/ 24 апреля 2009

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

Ответы [ 3 ]

9 голосов
/ 24 апреля 2009

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

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

2 голосов
/ 24 апреля 2009

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

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

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

0 голосов
/ 24 апреля 2009

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

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

...