【问题标题】:Opennetcf.IOC event subscription and inheritanceOpennetcf.IOC 事件订阅和继承
【发布时间】:2015-11-17 17:08:33
【问题描述】:

Class1 具有属性为 [EventPublication("event1")] 的事件。 Class2 和 Class3 继承自 Class1。

我想使用 [EventSubscription] 将 Method1 订阅到来自 Class2 的对象中的事件,并将 Method2 订阅到来自 Class3 的对象中的事件。

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

编辑: 也许我误解了关于 IoC 的一些明显的事情,或者我试图使简单的解决方案复杂化...... 我会尽力澄清我的问题。这是一些代码:

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");
    }
}

Another 类中有 action1() 和 action2() 方法。我想在调用 Presenter1 Run() 方法的实例时触发 action1(),并在调用 Presenter2 Run() 方法的实例时触发 action2()。但是调用 Run() 方法会触发 action1 和 action2 方法。

【问题讨论】:

    标签: c# inheritance compact-framework opennetcf opennetcf.ioc


    【解决方案1】:

    我不确定我是否理解这个问题。事件聚合有两个端点,一个发布者和一个订阅者。它们由您在属性中使用的字符串事件名称“连接”,仅此而已。

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

    如果您想使用事件并且想知道事件源实例是否不是接收器实例,只需对照this 检查事件的源输入参数,类似以下内容:

    [EventSubscription("myevent")]
    public void OnEvent(object sender, EventArgs a)
    {
        if(sender.Equals(this)) return;
    
        // do stuff here - the event came from another class instance
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多