/// <summary> /// Creates a SlaProvessor that uses given <c>provider</c> SlaProvider to determine which messages should be monitored. /// The <c>quotaPerMessageType</c> determines how many request messages of given type would be tracked at the same time (<see cref="QuotaPerMessageType"/> for details). /// </summary> /// <param name="provider">SlaProvider instance</param> /// <param name="quotaPerMessageType">The maximum number of request messages of given type that can be tracked at the same time.</param> /// <param name="loggingConfiguration">Specifies the log level for when SLA is met/breached</param> /// <param name="timeoutValidationSchedulerFactory">Timeout scheduler factory</param> internal protected SlaProcessor(SlaProvider provider, int quotaPerMessageType, LoggingConfiguration loggingConfiguration, Func <ISlaProcessor, IDisposable> timeoutValidationSchedulerFactory) { _provider = provider; QuotaPerMessageType = quotaPerMessageType; _logSlaBreach = loggingConfiguration.ConfigureLoggingAction(_logger, loggingConfiguration.LoggingLevelWhenSLAIsBreached); _logSlaMet = loggingConfiguration.ConfigureLoggingAction(_logger, loggingConfiguration.LoggingLevelWhenSLAIsMet); _timeoutValidationScheduler = timeoutValidationSchedulerFactory.Invoke(this); }