/// <summary>
        /// Initializes a new instance of the <see cref="ConsoleInstrumentationReporter"/> class.
        /// </summary>
        /// <param name="invocationCounter">The <see cref="MethodInvocationCounter"/> to report on.
        /// </param>
        /// <param name="invocationTimer">The <see cref="MethodInvocationTimer"/> to report on.
        /// </param>
        /// <param name="dateTimeProvider">The <see cref="IDateTimeProvider"/> to use to
        /// provide the report time.</param>
        /// <param name="guidProvider">The <see cref="IGuidProvider"/> to use to generate a
        /// report id.</param>
        /// <exception cref="ArgumentNullException"><paramref name="invocationCounter"/>,
        /// <paramref name="invocationTimer"/>, <paramref name="dateTimeProvider"/>, or
        /// <paramref name="guidProvider"/> is <see langword="null"/>.</exception>
        public ConsoleInstrumentationReporter(
            MethodInvocationCounter invocationCounter,
            MethodInvocationTimer invocationTimer,
            IDateTimeProvider dateTimeProvider,
            IGuidProvider guidProvider)
        {
            ParameterValidation.IsNotNull(invocationCounter, nameof(invocationCounter));
            ParameterValidation.IsNotNull(invocationTimer, nameof(invocationTimer));
            ParameterValidation.IsNotNull(dateTimeProvider, nameof(dateTimeProvider));
            ParameterValidation.IsNotNull(guidProvider, nameof(guidProvider));

            this.invocationCounter = invocationCounter;
            this.invocationTimer   = invocationTimer;
            this.dateTimeProvider  = dateTimeProvider;
            this.guidProvider      = guidProvider;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="InstrumentationInterceptor" /> class.
        /// </summary>
        /// <param name="invocationCounter">The <see cref="MethodInvocationCounter"/> to use to
        /// count any interceptions.</param>
        /// <param name="invocationTimer">The <see cref="MethodInvocationTimer"/> to use to time any
        /// interceptions.</param>
        /// <param name="registrars">The <see cref="IRegistrar"/> any interceptions will register
        /// to.</param>
        /// <param name="guidProvider">The <see cref="IGuidProvider"/> to use to generate
        /// an interception id.</param>
        /// <exception cref="ArgumentNullException"><paramref name="invocationCounter"/>,
        /// <paramref name="invocationTimer"/>, <paramref name="registrars"/>, or
        /// <paramref name="guidProvider"/> is <see langword="null"/>.</exception>
        public InstrumentationInterceptor(
            MethodInvocationCounter invocationCounter,
            MethodInvocationTimer invocationTimer,
            IEnumerable <IRegistrar> registrars,
            IGuidProvider guidProvider)
        {
            ParameterValidation.IsNotNull(invocationCounter, nameof(invocationCounter));
            ParameterValidation.IsNotNull(invocationTimer, nameof(invocationTimer));
            ParameterValidation.IsNotNull(registrars, nameof(registrars));
            ParameterValidation.IsNotNull(guidProvider, nameof(guidProvider));

            this.invocationCounter = invocationCounter;
            this.invocationTimer   = invocationTimer;
            this.registrars        = registrars;
            this.guidProvider      = guidProvider;
        }