public void Subscribe <T>(EventHandlers.EventHandler <T> eventHandler) where T : Event { if (!connection.IsConnected) { connection.TryConnect(); } var name = typeof(T).FullName; if (handlers.ContainsKey(name)) { handlers[name].Add(eventHandler); } else { policy.Execute(() => { using (var channel = connection.CreateModel()) { channel.QueueBind(queue: queueName, exchange: exchangeName, routingKey: name); handlers.Add(name, new List <IEventHandler>()); handlers[name].Add(eventHandler); eventTypes.Add(typeof(T)); } }); } }
public void Unsubscribe <T>(EventHandlers.EventHandler <T> eventHandler) where T : Event { if (!connection.IsConnected) { connection.TryConnect(); } var name = typeof(T).FullName; if (handlers.ContainsKey(name) && handlers[name].Contains(eventHandler)) { handlers[name].Remove(eventHandler); } }