我在C#中有一个事件。有五个订阅者。所有订阅者都是不同的类。但在提升事件的同时,我希望不是所有的订阅者/处理者都应该被通知来处理这个事件。我应该有一些过滤机制,然后只应通知剩余的订阅者。有什么可能是实现这一目标的最佳方式?
答案 0 :(得分:2)
如果你想用你现有的东西做,那么只需迭代事件的调用列表。
var list = localHandler.GetInvocationList();
foreach (EventHandler<T> item in list)
{
if(((ICanDoThing)item.Target).CanDoThing)
{
item(this, someArgs);
}
}
现在,您可以看到我已将item.Target转换为ICanDoThing类型,这是我刚刚编写的一个接口,它公开了一个方法“CanDoThing”。这允许您查询对象是否支持您的特定需求。
您可能会质疑是否应该为此事件使用事件,但上述内容将允许您这样做。
答案 1 :(得分:1)
我认为您需要多个事件,以便订阅者可以订阅他们真正想要的事件。
订阅活动意味着您对某个活动感兴趣。如果你 对你不应该订阅它的事件不感兴趣。
答案 2 :(得分:1)
您可以使用此处描述的观察者模式:http://www.dofactory.com/Patterns/PatternObserver.aspx并在观察者的更新方法中实现您的逻辑。