首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opennetcf.IOC事件订阅和继承

Opennetcf.IOC事件订阅和继承
EN

Stack Overflow用户
提问于 2015-08-24 10:03:18
回答 1查看 77关注 0票数 0

Class1具有具有属性EventPublication("event1")的事件。Class2和Class3继承了Class1。

我希望使用Method1订阅Class2中的事件,从Method2订阅到Class3中的事件。

但是在派生类中,事件的EventPublication名称是相同的。那么如何区分派生类中的事件呢?有可能吗?

编辑:可能误解了关于IoC的一些显而易见的事情,或者我试图使简单的解决方案复杂化。我会尽量澄清我的问题。以下是一些代码:

代码语言:javascript
复制
class BasePresenter
{
    [EventPublication("event")]
    public event Action action;

    public void Run()
    {
        someAction();

        if (action != null)
            action();
    }

    protected virtual void someAction()
    {

    }
}

class Presenter1 : BasePresenter
{
    protected override void someAction()
    {

    }
}

class Presenter2 : BasePresenter
{
    protected override void someAction()
    {

    }
}

class AnotherClass
{
    [EventSubscription("event", ThreadOption.Caller)]
    public void action1()
    {
        System.Windows.Forms.MessageBox.Show("Presenter1 started");
    }

    [EventSubscription("event", ThreadOption.Caller)]
    public void action2()
    {
        System.Windows.Forms.MessageBox.Show("Presenter2 started");
    }
}

在另一个类中有action1()和action2()方法。我想在调用action1()方法实例时触发Presenter1 (),在调用Presenter2 Run()方法实例时触发action2()。但是,调用Run()方法将触发action1和action2两种方法。

EN

回答 1

Stack Overflow用户

发布于 2015-08-25 13:35:07

我不确定我是否理解这个问题。事件聚合有两个端,一个是发布服务器,另一个是订阅服务器。它们是通过您在属性中使用的字符串事件名称“连接”的,而不是其他任何东西。

订阅可以在与发布相同的类中完成,尽管我不清楚为什么要这样做,只需让基类调用派生类实现的虚拟方法就可以了。

如果您想使用事件,并且想知道事件源实例是否不是接收方实例,只需对照this检查事件的源输入参数,如下所示:

代码语言:javascript
复制
[EventSubscription("myevent")]
public void OnEvent(object sender, EventArgs a)
{
    if(sender.Equals(this)) return;

    // do stuff here - the event came from another class instance
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32179550

复制
相关文章

相似问题

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