0
我有一个独立的WPF加载项。插件获取对暴露事件的类型的引用。由于插件在特定的应用程序域中被隔离,因此主机对插件的DLL或存储在其中的类型一无所知。在单独的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是未知的,它无法加载类型并抛出异常。我怎样才能保持隔离状态,并且能够像上面描述的那样进行操作?
“失败”如何?实际抛出什么异常?你的加载项类型是否也是'MarshalByRef'?或可序列化?这个问题与WPF真的有什么关系吗?或者你可以在简单的控制台程序中重现相同的问题吗?请注意,如果没有[可靠,_minimal_,_complete_代码示例](http://stackoverflow.com/help/mcve)可靠地显示问题,则可能很难找到愿意花时间想出一个解决方案(假设存在)。 – 2015-04-02 04:12:13
这似乎是一个奇怪的设计。你的'AddInHandler'不是一个处理程序 - 它是事件的生产者。似乎这可能是倒退。 – Enigmativity 2015-07-02 07:19:16