У меня есть изолированная надстройка WPF. Надстройка получает ссылку на тип, предоставляющий событие. Поскольку надстройка изолирована в определенном домене приложения, хост ничего не знает о DLL надстройки или хранящихся там типах.
Договор:
[AddInContract]
public interface IAddInContract: IContract
{
void Initialize(IAddInHandler handler);
}
handler — это тип, который предоставляет событие и является производным от MarshalByRef, так что прокси-сервер передается надстройке:
public class AddInHandler : MarshalByRefObject, IAddInHandler
{
public event SelectionChangedEventHandler SelectionChanged;
}
и в надстройке делаем что-то вроде:
public override void Initialize(IAddInHandler handler)
{
handler.SelectionChanged += handler_SelectionChanged;
}
Однако это не удается, поскольку он пытается (каким-то образом) передать ссылку на надстройку в хост-приложение, а поскольку для хоста dll надстройки неизвестна, он не может загрузить тип и выдает исключение. Как я могу по-прежнему поддерживать изоляцию и иметь возможность делать что-то вроде описанного выше?
MarshalByRef
? Или сериализуемый? Действительно ли этот вопрос имеет какое-либо отношение к WPF? Или вы могли бы воспроизвести ту же проблему в простой консольной программе? Обратите внимание, что без хорошего, минимального, полного примера кода, надежно демонстрирующего проблема, вам может быть трудно найти кого-то, кто захочет найти время, чтобы придумать решение (при условии, что оно существует). - person Peter Duniho   schedule 02.04.2015AddInHandler
не обработчик, а источник событий. Кажется, это может быть задним числом. - person Enigmativity   schedule 02.07.2015