Как бы я дал делегату бесконечную жизнь так же, как прокси при выполнении кросс-доменной разработки? - PullRequest
2 голосов
/ 06 апреля 2011

Фон
Я разработал собственную архитектуру плагинов, используя производную от Observer / Event Pattern и кусочки кода из следующего:

Код проекта: менеджер плагинов
Microsoft: домены приложений
Даниэль Солтыка: простой плагин

У меня была проблема в прошлом. Каждый плагин загружается в свой собственный домен приложения, поэтому они не могут видеть друг друга и не могут видеть вещи в основном домене приложения (в нашем приложении есть проприетарные данные, которые мы не хотим, чтобы разработчики плагинов видели). Прокси-сервер создается с каждым новым доменом / плагином приложения для связи с плагином из основного приложения. Проблема была в том, что прокси стал отключаться через 5 минут или около того. Это было легко решено путем переопределения метода InitializeLifetimeService() и возврата нуля ( ссылка ).

Проблема

Проблема сейчас в другом. Я "регистрирую" функции обратного вызова на стороне плагина, отправляя делегатов от основной части приложения каждому плагину. Затем плагины могут вызывать этих делегатов, которые будут вызывать функции в основном приложении. Тем не менее, делегаты, по-видимому, отключаются так же, как и прокси в приведенном выше объяснении.

Я прочитал это на SO, и метод ClientSponsor.Register() звучит замечательно, но для него требуется параметр MarshalByRefObject в качестве параметра. Мои делегаты, так что без кости.

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

Есть идеи?

1 Ответ

1 голос
/ 08 апреля 2011

ОК, я понял, как обойти эту проблему. Я изменил свой подход и создал отдельный прокси-объект, полученный из MarshalByRefObject, и перегрузил ту же самую функцию InitializeLifetimeService(), чтобы она не отключалась. После этого у меня будет прокси, используемый плагинами для связи с основным приложением.

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

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