private bool TryGetSubscriber(MeteringEvent evt, out List <CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber> listener)
        {
            bool result;

            lock (this.syncObject)
            {
                result = this.listeners.TryGetValue(evt, out listener);
            }
            return(result);
        }
        private void RaiseEvent(MeteringEvent evt, TCountType filter)
        {
            List <CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber> collection;

            if (this.TryGetSubscriber(evt, out collection))
            {
                List <CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber> list = new List <CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber>(collection);
                foreach (CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber subscriber in list)
                {
                    subscriber.RaiseEvent(filter);
                }
            }
        }
 private void AddSubscriber(MeteringEvent evt, CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber subscriber)
 {
     lock (this.syncObject)
     {
         List <CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber> list;
         if (!this.listeners.TryGetValue(evt, out list))
         {
             list = new List <CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber>();
             this.listeners.Add(evt, list);
         }
         list.Add(subscriber);
     }
 }
 public void SubscribeTo(MeteringEvent evt, ICountedEntity <TEntityType> entity, Action <ICountedEntity <TEntityType> > entityDelegate)
 {
     this.AddSubscriber(evt, new CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber(entityDelegate, entity));
 }
 public void SubscribeTo(MeteringEvent evt, TCountType?measure, Action <TCountType> measureDelegate)
 {
     this.AddSubscriber(evt, new CountTrackerDiagnostics <TEntityType, TCountType> .Subscriber(measureDelegate, measure));
 }