2012-11-05 17 views
5

Ho un evento in C#. Ci sono cinque abbonati per quello. Tutti gli abbonati sono classi diverse. Ma mentre sollevo l'evento voglio che non tutto il sottoscrittore/gestore debba essere informato per gestire questo evento. Dovrei avere un meccanismo di filtraggio e quindi solo gli abbonati rimanenti dovrebbero essere avvisati. Quale potrebbe essere il modo migliore per raggiungere questo obiettivo?C# Filtraggio lista invocazione evento

+0

Ti dispiacerebbe elaborare come dovrebbe funzionare il filtro? Dipende da un "tipo di messaggio" impostato in anticipo o qualcosa che fa il primo sottoscrittore che invalida che l'evento debba essere attivato dagli altri ascoltatori (una specie di "Mi sono già preso cura di questo, il resto di voi don" devo fare qualcosa ")? – Patrick

+0

Sì, dipende dal tipo di messaggio. Ci sarà un ID e sulla base di questo ho bisogno di invocare solo quegli abbonati interessati con thar Id –

+0

Questa lista di ID è predeterminata? In altre parole, puoi aggiungere un evento per ciascuno degli id, o è dinamico nel senso che l'elenco può cambiare durante la vita dell'applicazione? – Patrick

risposta

2

Se si desidera farlo con il proprio esistente, è sufficiente ripetere l'elenco di chiamate sull'evento.

var list = localHandler.GetInvocationList(); 
foreach (EventHandler<T> item in list) 
{ 
    if(((ICanDoThing)item.Target).CanDoThing) 
    { 
     item(this, someArgs); 
    } 
} 

Ora, si può vedere che ho gettato item.Target ad un tipo di ICanDoThing, che è un'interfaccia che ho appena fatto up che espone un metodo "CanDoThing". Questo ti permette di interrogare l'oggetto per sapere se supporta la tua particolare esigenza.

Probabilmente dovresti chiederci se dovresti comunque utilizzare un evento per questo, ma quanto sopra ti consentirà di farlo.

1

Penso che siano necessari più eventi qui, in modo che gli abbonati possano iscriversi agli eventi che desiderano davvero.

Sottoscrivere un evento significa che sei interessato a un evento. Se non sei interessato a un evento, non devi iscriverti a .