/// <inheritdoc /> public void AddHandler <T>(IAciEventHandler <T> handler) where T : struct { Type eventArgType = typeof(T); Delegate eventInstance = null; if (!registry.TryGetValue(eventArgType, out eventInstance)) { registry[eventArgType] = new EventDelegate <T>(handler.OnEvent); return; } EventDelegate <T> del = eventInstance as EventDelegate <T>; del += handler.OnEvent; registry[eventArgType] = del; }
/// <inheritdoc /> public void RemoveHandler <T>(IAciEventHandler <T> handler) where T : struct { Type eventArgType = typeof(T); Delegate eventInstance = null; if (!registry.TryGetValue(eventArgType, out eventInstance)) { // we don't have a valid event instance return; } EventDelegate <T> del = eventInstance as EventDelegate <T>; del -= handler.OnEvent; registry[eventArgType] = del; // if we don't have any subscribers remove event handler if (del != null) { return; } registry.Remove(eventArgType); }