首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >订阅独立WPF外接程序中的事件

订阅独立WPF外接程序中的事件
EN

Stack Overflow用户
提问于 2015-04-01 14:40:04
回答 1查看 257关注 0票数 0

我有一个独立的WPF外接程序。外接程序获取对公开事件的类型的引用。由于插件被隔离在特定的应用程序域中,因此主机对插件的DLL或存储在其中的类型一无所知。

合同:

代码语言:javascript
复制
    [AddInContract]
    public interface IAddInContract: IContract
    {
        void Initialize(IAddInHandler handler);
    }

handler是一种公开事件的类型,它派生自MarshalByRef,以便将代理传递给外接程序:

代码语言:javascript
复制
    public class AddInHandler : MarshalByRefObject, IAddInHandler 
    {
       public event SelectionChangedEventHandler SelectionChanged;
    }

在插件中,我们做了一些类似的事情:

代码语言:javascript
复制
        public override void Initialize(IAddInHandler handler)
        {
            handler.SelectionChanged += handler_SelectionChanged;
        }

然而,这失败了,因为它试图(以某种方式)将插件的引用传递到主机应用程序,并且由于主机的插件的dll是未知的,所以它无法加载该类型并抛出异常。我怎样才能仍然保持隔离,并能够做上面描述的事情呢?

EN

回答 1

Stack Overflow用户

发布于 2015-07-02 15:01:39

我遇到了类似的问题,并通过以下方式解决了它:

对于外接程序合约,我没有使用使用委托的C#事件模式。我使用了“类Java”的事件注册模式,这意味着我用一个方法创建了一个接口(接口需要实现IContract),然后我在契约中用AddEventHandler和RemoveEventHandler创建了两个方法。两者都需要先前创建的接口的一个实例。在适配器中,您可以在委托和该接口实现之间创建适配器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29384383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档