Фон
Я разработал собственную архитектуру плагинов, используя производную от Observer / Event Pattern и кусочки кода из следующего:
Код проекта: менеджер плагинов
Microsoft: домены приложений
Даниэль Солтыка: простой плагин
У меня была проблема в прошлом. Каждый плагин загружается в свой собственный домен приложения, поэтому они не могут видеть друг друга и не могут видеть вещи в основном домене приложения (в нашем приложении есть проприетарные данные, которые мы не хотим, чтобы разработчики плагинов видели). Прокси-сервер создается с каждым новым доменом / плагином приложения для связи с плагином из основного приложения. Проблема была в том, что прокси стал отключаться через 5 минут или около того. Это было легко решено путем переопределения метода InitializeLifetimeService()
и возврата нуля ( ссылка ).
Проблема
Проблема сейчас в другом. Я "регистрирую" функции обратного вызова на стороне плагина, отправляя делегатов от основной части приложения каждому плагину. Затем плагины могут вызывать этих делегатов, которые будут вызывать функции в основном приложении. Тем не менее, делегаты, по-видимому, отключаются так же, как и прокси в приведенном выше объяснении.
Я прочитал это на SO, и метод ClientSponsor.Register()
звучит замечательно, но для него требуется параметр MarshalByRefObject в качестве параметра. Мои делегаты, так что без кости.
Я хочу найти способ, чтобы делегаты моего основного приложения были подключены через домены приложения, как прокси плагинов.
Есть идеи?