I created a static EventHub class that can register listeners and post new events. I'm a little new to C #, so I'm sure there are ways to make this class better:
public enum EventType
{
}
public static class EventHub
{
static Dictionary<EventType, List<Delegate>> _eventHandlers;
public static void Publish( EventType eventType, object data )
{
if( _eventHandlers.ContainsKey( eventType ) )
{
_invokeHandlers( _eventHandlers[ eventType ], data );
}
}
static void _invokeHandlers(List<Delegate> list, object data)
{
if( !(list != null && list.Count > 0) )
return;
foreach( var handler in list )
handler.DynamicInvoke( data );
}
public static void Register( EventType eventType, Delegate handler )
{
if( _eventHandlers == null )
_eventHandlers = new Dictionary<EventType, List<Delegate>>();
if( _eventHandlers.ContainsKey( eventType ) )
_eventHandlers[ eventType ].Add( handler );
else
_eventHandlers.Add( eventType, new List<Delegate> { handler });
}
public static void Dismiss( EventType eventType, Delegate handler )
{
if( _eventHandlers == null || _eventHandlers.Count == 0 )
return;
if( _eventHandlers.ContainsKey( eventType ) && _eventHandlers[ eventType ].Count > 0 )
_eventHandlers[ eventType ].Remove( handler );
if( _eventHandlers[ eventType ].Count == 0 )
_eventHandlers.Remove( eventType );
}
}
Using:
void MyHandler(object data) { }
EventHub.Register( EventType.MyType, MyHandler );
EventHub.Publish( EventType.MyType, "I am data, I can be anything" );
source
share