public void Subscribe <TEvent>(Infrastructure.ISubscriber <TEvent> subscriber) { ThrowIfNull(subscriber); if (_draining == 1) { return; } Type key = typeof(TEvent); if (_lazyContainer.Value.ContainsKey(key)) { if (_lazyContainer.Value[key].Contains(subscriber)) { throw new InvalidOperationException("Type has been already subscribed."); } else { _lazyContainer.Value[key].Add(subscriber); } } else { if (_lazyContainer.Value.TryAdd(key, new HashSet <object>())) { Interlocked.Increment(ref _groupCount); _lazyContainer.Value[key].Add(subscriber); } } }
public void Unsubscribe <TEvent>(Infrastructure.ISubscriber <TEvent> subscriber) { ThrowIfNull(subscriber); if (_draining == 1) { return; } Type key = typeof(TEvent); if (_lazyContainer.Value.ContainsKey(key)) { if (_lazyContainer.Value[key].Contains(subscriber)) { _lazyContainer.Value[key].Remove(subscriber); } } }