我有一个独立的 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 是未知的,它无法加载类型并引发异常。我怎样才能仍然保持隔离,并能够执行上述操作?