private void SubscriptionRemovedInternal <T>(KeySubscriptionContainer <T> container, T observer, string key) where T : class { if (SubscriptionRemoved != null) { var count = container.Count(key); if (container.Count() == 0) { container.SubscriptionRemoved -= SubscriptionRemovedInternal; Containers.Remove(container); } var arg = new SubscriptionArg(key, count, observer); SubscriptionRemoved?.Invoke(arg); } }
public IDisposable AddObserver <T>(string key, T observer) where T : class { var container = Containers.OfType <KeySubscriptionContainer <T> >().FirstOrDefault(); if (container == null) { container = new KeySubscriptionContainer <T>(); Containers.Add(container); container.SubscriptionRemoved += SubscriptionRemovedInternal; } var subscription = container.AddItem(key, observer); var count = container.Count(key); var arg = new SubscriptionArg(key, count, observer); SubscriptionCreated?.Invoke(arg); return(subscription); }