[英]C# Event invocation list filtering
我在C#中有一個事件。 有五個訂閱者。 所有訂閱者都是不同的類。 但在提升事件的同時,我希望不是所有的訂閱者/處理者都應該被通知來處理這個事件。 我應該有一些過濾機制,然后只應通知剩余的訂閱者。 有什么可能是實現這一目標的最佳方式?
如果你想用你現有的東西做,那么只需迭代事件的調用列表。
var list = localHandler.GetInvocationList();
foreach (EventHandler<T> item in list)
{
if(((ICanDoThing)item.Target).CanDoThing)
{
item(this, someArgs);
}
}
現在,您可以看到我已經將item.Target轉換為ICanDoThing類型,這是我剛剛編寫的一個接口,它公開了一個方法“CanDoThing”。 這允許您查詢對象是否支持您的特定需求。
您可能會質疑是否應該為此使用事件,但上述內容將允許您這樣做。
我認為你需要多個事件,以便訂閱者可以訂閱他們真正想要的事件。
訂閱活動意味着您對活動感興趣。 如果您對某個活動不感興趣,請不要訂閱。
您可以使用觀察者模式,如下所述: http : //www.dofactory.com/Patterns/PatternObserver.aspx,並在觀察者的更新方法中實現您的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.