public Reporter( AppMetricsOptions options, ReportFactory reportFactory, IMetrics metrics, IScheduler scheduler, ILoggerFactory loggerFactory) { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (reportFactory == null) { throw new ArgumentNullException(nameof(reportFactory)); } if (metrics == null) { throw new ArgumentNullException(nameof(metrics)); } if (scheduler == null) { throw new ArgumentNullException(nameof(scheduler)); } if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } _reportGenerator = new DefaultReportGenerator(options, loggerFactory); _metrics = metrics; _scheduler = scheduler; _loggerFactory = loggerFactory; _logger = loggerFactory.CreateLogger <Reporter>(); _providers = reportFactory.GetProviders(); if (_providers.Count <= 0) { return; } _metricReporters = new Dictionary <Type, IMetricReporter>(_providers.Count); foreach (var provider in _providers) { _metricReporters.Add(provider.Key, provider.Value.CreateMetricReporter(provider.Key.Name, _loggerFactory)); } _successCounter = new CounterOptions { Context = Constants.InternalMetricsContext, MeasurementUnit = Unit.Items, ResetOnReporting = true, Name = "report_success" }; _failedCounter = new CounterOptions { Context = Constants.InternalMetricsContext, MeasurementUnit = Unit.Items, ResetOnReporting = true, Name = "report_failed" }; }