/// <summary>
        /// Initializes a new instance of the <see cref="EventPublishedEventArgs"/> class.
        /// </summary>
        /// <param name="scope">Scope used to resolve subscribers.</param>
        /// <param name="applicationEvent">Published event.</param>
        /// <param name="successful">All handlers processed the event successfully.</param>
        /// <exception cref="System.ArgumentNullException">
        /// scope
        /// or
        /// applicationEvent
        /// </exception>
        public EventPublishedEventArgs(IContainerScope scope, ApplicationEvent applicationEvent, bool successful)
        {
            if (scope == null) throw new ArgumentNullException("scope");
            if (applicationEvent == null) throw new ArgumentNullException("applicationEvent");

            Scope = scope;
            ApplicationEvent = applicationEvent;
            Successful = successful;
        }
        /// <summary>
        ///     Initializes a new instance of the <see cref="EventPublishedEventArgs" /> class.
        /// </summary>
        /// <param name="scope">Scope used to resolve subscribers.</param>
        /// <param name="applicationEvent">Published event.</param>
        /// <param name="successful">All handlers processed the event successfully.</param>
        /// <param name="eventInfo"></param>
        /// <exception cref="System.ArgumentNullException">
        ///     scope
        ///     or
        ///     applicationEvent
        /// </exception>
        public EventPublishedEventArgs(IContainerScope scope, ApplicationEvent applicationEvent, bool successful,
            IReadOnlyCollection<EventHandlerInfo> eventInfo)
        {
            if (applicationEvent == null) throw new ArgumentNullException("applicationEvent");

            Scope = scope;
            ApplicationEvent = applicationEvent;
            Successful = successful;
            Handlers = eventInfo;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="EventHandlerFailedEventArgs"/> class.
        /// </summary>
        /// <param name="applicationEvent">The application event that one or more subscribers failed to process.</param>
        /// <param name="failures">One instance per handler.</param>
        /// <param name="handlerCount">Total amount of subscribers (and not just the amount of failed handlers).</param>
        /// <exception cref="System.ArgumentNullException">
        /// applicationEvent
        /// or
        /// failures
        /// </exception>
        /// <exception cref="System.ArgumentOutOfRangeException">handlerCount;Suspicions handler count</exception>
        public EventHandlerFailedEventArgs(ApplicationEvent applicationEvent, IReadOnlyList<HandlerFailure> failures,
            int handlerCount)
        {
            if (applicationEvent == null) throw new ArgumentNullException("applicationEvent");
            if (failures == null) throw new ArgumentNullException("failures");
            if (handlerCount < 0 || handlerCount > 1000)
                throw new ArgumentOutOfRangeException("handlerCount", handlerCount, "Suspicions handler count");

            ApplicationEvent = applicationEvent;
            Failures = failures;
            HandlerCount = handlerCount;
        }