Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
        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);
        }