private void PublishCore(Type type, object eventModel) { IEventSubscribers subscribers = null; if (_subscribers.TryGetValue(type, out subscribers)) { subscribers.Publish(eventModel); } }
public IEventSubscribers GetSubscribers <TEvent>() { var type = typeof(TEvent); IEventSubscribers subscribers = null; _subscribers.TryGetValue(type, out subscribers); return(subscribers); }
public void Unsubscribe <TEvent>(object subscriber) { var type = typeof(TEvent); IEventSubscribers subscribers = null; if (_subscribers.TryGetValue(type, out subscribers)) { var concrete = subscribers as EventSubscribers <TEvent>; concrete.RemoveByOwner(subscriber); if (concrete.Count == 0) { _subscribers.Remove(type); } } }
public void Subscribe <TEvent>(object subscriber, Action <TEvent> handler) { var type = typeof(TEvent); IEventSubscribers subscribers = null; if (!_subscribers.TryGetValue(type, out subscribers)) { subscribers = new EventSubscribers <TEvent>(); _subscribers.Add(type, subscribers); } var concrete = subscribers as EventSubscribers <TEvent>; concrete.Add(new EventSubscriberItem <TEvent> { Subscriber = subscriber, Handler = handler }); }