Class1具有具有属性EventPublication("event1")的事件。Class2和Class3继承了Class1。
我希望使用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");
}
}在另一个类中有action1()和action2()方法。我想在调用action1()方法实例时触发Presenter1 (),在调用Presenter2 Run()方法实例时触发action2()。但是,调用Run()方法将触发action1和action2两种方法。
发布于 2015-08-25 13:35:07
我不确定我是否理解这个问题。事件聚合有两个端,一个是发布服务器,另一个是订阅服务器。它们是通过您在属性中使用的字符串事件名称“连接”的,而不是其他任何东西。
订阅可以在与发布相同的类中完成,尽管我不清楚为什么要这样做,只需让基类调用派生类实现的虚拟方法就可以了。
如果您想使用事件,并且想知道事件源实例是否不是接收方实例,只需对照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
}https://stackoverflow.com/questions/32179550
复制相似问题