private void DoRemoveHandler(string eventName, SubscriptionInfoModel subsToRemove)
 {
     if (subsToRemove != null)
     {
         _handlers[eventName].Remove(subsToRemove);
         if (!_handlers[eventName].Any())
         {
             _handlers.Remove(eventName);
             var eventType = _eventTypes.SingleOrDefault(e => e.Name == eventName);
             if (eventType != null)
             {
                 _eventTypes.Remove(eventType);
             }
             RaiseOnEventRemoved(eventName);
         }
     }
 }
        private void DoAddSubscription(Type handlerType, string eventName, bool isDynamic)
        {
            if (!HasSubscriptionsForEvent(eventName))
            {
                _handlers.Add(eventName, new List <SubscriptionInfoModel>());
            }

            if (_handlers[eventName].Any(s => s.HandlerType == handlerType))
            {
                throw new ArgumentException(
                          $"Handler Type {handlerType.Name} already registered for '{eventName}'", nameof(handlerType));
            }

            if (isDynamic)
            {
                _handlers[eventName].Add(SubscriptionInfoModel.Dynamic(handlerType));
            }
            else
            {
                _handlers[eventName].Add(SubscriptionInfoModel.Typed(handlerType));
            }
        }