У меня есть изолированная надстройка WPF. Приложение добавляет ссылку на тип, который предоставляет событие. Поскольку addin изолирован в определенном appdomain, хост ничего не знает о DLL addin или о хранимых там типах.Подсети к событиям в изолированной надстройке WPF
контракта:
[AddInContract]
public interface IAddInContract: IContract
{
void Initialize(IAddInHandler handler);
}
обработчик представляет собой тип, который предоставляет событие, и происходит от MarshalByRef, так что прокси-сервер передается надстройке:
public class AddInHandler : MarshalByRefObject, IAddInHandler
{
public event SelectionChangedEventHandler SelectionChanged;
}
и в надстройке мы делаем что-то вроде:
public override void Initialize(IAddInHandler handler)
{
handler.SelectionChanged += handler_SelectionChanged;
}
Однако это не удается, поскольку оно пытается (каким-то образом) передать ссылку добавления в приложение-хост, а так как на хост, dll addin неизвестно, ему не удается загрузить исключение типа и исключений. Как я могу поддерживать изоляцию и быть в состоянии сделать что-то вроде описанного выше?
«Сбой» как? Какое исключение фактически выбрано? Является ли ваш тип надстройки также «MarshalByRef»? Или сериализуем? Этот вопрос действительно имеет отношение к WPF? Или вы могли бы воспроизвести ту же проблему в простой консольной программе? Обратите внимание, что без [хорошего, _minimal_, _complete_ кода примера] (http://stackoverflow.com/help/mcve), который надежно демонстрирует проблему, вам может быть трудно найти кого-то, желающего найти время, чтобы придумать решение (если оно существует). –
Это кажется странным дизайном. Ваш 'AddInHandler' не является обработчиком - он является производителем событий. Похоже, это может быть наоборот. – Enigmativity