Использование AppDomain.CreateInstanceAndUnwrap для создания экземпляра типа T с последующим ранним связыванием с методом типа T - PullRequest
2 голосов
/ 15 июня 2011

В документации MSDN для метода AppDomain.CreateInstanceAndUnwrap это записывается как примечание

Если вы делаете ранний вызов метода M объекта типа T1, который был возвращен CreateInstanceAndUnwrap, и этот метод делает ранний вызов метода объекта типа T2 в сборке C, другой чем текущая сборка или сборка, содержащая T1, сборка C загружается в текущий домен приложения. Эта загрузка происходит, даже если ранний вызов T1.M () был выполнен в теле DynamicMethod или в другом динамически генерируемом коде. Если текущий домен является доменом по умолчанию, сборка C не может быть выгружена до завершения процесса. Если текущий домен позднее попытается загрузить сборку C, загрузка может завершиться неудачей.

(http://msdn.microsoft.com/en-us/library/3c4f1xde.aspx)

У кого-нибудь есть техническое объяснение вышеупомянутой записке? Почему это так? Выполняется ли поиск зависимостей сборки при первом вызове метода для объекта?

1 Ответ

3 голосов
/ 25 октября 2011

Зависимость сборки - это вызов при создании экземпляра объекта.

Давайте проанализируем гипотетический сценарий.У нас есть 2 DLL: Lib1 и Lib2.(Lib1 использует методы из Lib2).

В нашем приложении основной метод выглядит следующим образом:

Worker localWorker = new Worker();
localWorker.PrintDomain();

AppDomain ad = AppDomain.CreateDomain("New domain");
Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap("Lib1","Lib1.Worker");
remoteWorker.PrintDomain();

Зависимость сборки проверяется в строке:

Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap("Lib1","Lib1.Worker");

Напримересли Lib2.dll не существует, мы получим исключение.

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