.Net - Загрузка типа динамически из AppDomain без удаленного прокси - PullRequest
0 голосов
/ 28 июля 2010

Я загрузил определенный домен приложений и хочу динамически загружать из него некоторые типы (не так ли?). Дело в том, что все методы CreateInstance класса AppDomain возвращают вещи как дескриптор удаленного объекта. Удаленные прокси имеют ограничения, которых я бы хотел избежать, таких как: наличие сериализуемых конкретных классов и чрезмерная сборка мусора, если не используется LifeTimeService.

Мой вопрос: как я могу загрузить тип в другой домен приложения, не помещая его в удаленный прокси? Ниже приведен фрагмент моего кода.

AppDomainSetup ads = new AppDomainSetup();
ads.ApplicationBase = Path.GetDirectoryName(_bllAssemblyPath);
ads.PrivateBinPath =  Path.GetDirectoryName(_bllAssemblyPath);
if (File.Exists(_bllAssemblyPath + ".config"))
    ads.ConfigurationFile = _bllAssemblyPath + ".config";
_workerSpace= AppDomain.CreateDomain("worker", new System.Security.Policy.Evidence(AppDomain.CurrentDomain.Evidence), ads );

_bllQueue = _workerSpace.CreateInstanceFrom(_bllAssemblyPath, queueType) as IThumbCapQueue;

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Для связи между доменами приложений вам всегда понадобится прокси-сервер определенного типа, поскольку .NET не позволит вам напрямую обращаться к памяти объектов в другом домене приложения.Также обратите внимание, что оба домена приложений в вашем примере будут работать в одном и том же процессе Windows.

Существует новая инфраструктура удаленного взаимодействия: Службы RIA , которая может предоставить вам необходимые функции.

0 голосов
/ 28 июля 2010

Вместо того, чтобы сделать объекты, которые вас интересуют, удаленными, создайте «загрузчик» с возможностью удаленного взаимодействия, который служит каналом связи с удаленным доменом приложений, и используйте его для загрузки того, что вас интересует. Я делаю это напроект, который требует отражения произвольных .NET библиотек для получения информации о типах (я делаю это в новом домене приложений, потому что, когда я закончу, я хочу выгрузить сборку, чтобы файл не был заблокирован) - удаленная сборка загружает сборку, делаетотражение, собирает необходимую информацию и отправляет ее обратно вызывающему AppDomain в виде сериализуемых объектов.Смотрите здесь .

...