Как обрабатывать обмен данными между доменами приложений - PullRequest
5 голосов
/ 19 января 2012

Мы создаем приложение .NET, в которое загружаем сборки внешнего кода («плагины»).До этого момента мы загружали эти сборки в один (основной) домен приложения.

Мы хотели бы иметь возможность выгрузить сборку после ее загрузки.

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

Проблемы, которые возникают у нас с этим подходом:

  1. ПлагинDLL нужно будет взаимодействовать с классами в главном домене приложений (например, в логгере).
  2. Данные, отправляемые в подключаемый модуль dll, не обязательно помечаются как Serializable или производные от MarshalByRefObj.

Существует ли какая-либо распространенная практика разделения приложений в таких случаях?Какое лучшее решение мы могли бы найти?

Еще один интересный вопрос - почему MarshalByRef не идет по атрибуту и ​​не заставляет нас наследовать от объекта?

1 Ответ

3 голосов
/ 09 августа 2012

Самый простой способ связи между доменами приложений - это использовать AppDomain.CreateInstanceAndUnwrap .Это позволит вам создать экземпляр объекта в другом домене приложений и вернуть прокси для этого объекта.Из прокси вы можете эффективно выполнять вызовы методов по всему домену приложения.

Если ваши текущие классы не расширяются MarshalByRef, то вы должны создать класс моста, который выполняет и может действовать как посредник.

...