Мы создаем приложение (WinForms, .NET 3.5), которое загружает DLL-модули «Plugin» в дополнительный AppDomain. Вторичному AppDomain необходимо время от времени сообщать с 1-го (более конкретно, вызывать или получать данные из объектов, созданных в основном AppDomain).Связь между AppDomains
Я прочитал большую часть материала об AppDomains и общении между ними.
До сих пор только простое решение я видел было унаследовать от MarshalByRefObject и пропускание TransparentProxy в 2 AppDomain, вызывая методы на прокси-сервере.
Этот метод имеет свои недостатки (не всегда возможно наследовать от MBRO в случае, например, типов фреймов или типов, которые уже наследуются от другого класса, статических полей/классов и т. Д.).
Поскольку ток точек связи являются довольно постоянными (только 2-3 сценариями, которые требуют коммуникации), я рассмотрел создание простого Посредника класса со следующими свойствами:
- будет создан в 1-й (основной) AppDomain.
- Будет функционировать только как «прохожий» для «реальных» объектов, созданных в главном AppDomain.
- Наследуется от MBRO, а ссылка прокси-сервера будет отправлена во второй AppDomain.
Вызов методов этого прокси-объекта, который, в свою очередь, вызовет методы на «реальных» объектах в 1-м AppDomain.
Мои вопросы -
- ли это, кажется логичным дизайном?
- Что еще более важно, существует ли уже класс посредников/сообщений, проходящих через WCF или любую другую инфраструктуру коммутации? это похоже на общую концепцию, и мне интересно, есть ли что-то подобное.
Читая точку * Плагин * Я всегда спрашиваю сначала: «Вы когда-нибудь слышали о [MEF] (http://mef.codeplex.com/)?» – Oliver
Да, я слышал об этом. AFAIK встроен в .NET, не уверен в поддержке более ранних версий ... Кроме того, я не уверен, как он подходит для этого конкретного сценария. –
Я понимаю, что прошло 18 месяцев с момента публикации. Мне интересно, как вы разобрались.Мы сталкиваемся с аналогичными ограничениями, которые MEF сам по себе не может решить и что MAF, похоже, пошел по пути птицы-додо. –