namespace TeamCity.MSBuild.Logger { using System; using System.Collections.Generic; using JetBrains.Annotations; // ReSharper disable once ClassNeverInstantiated.Global internal class PerformanceCounterFactory: IPerformanceCounterFactory { private readonly Func _performanceCounterFactory; public PerformanceCounterFactory( [NotNull] Func performanceCounterFactory) { _performanceCounterFactory = performanceCounterFactory ?? throw new ArgumentNullException(nameof(performanceCounterFactory)); } public IPerformanceCounter GetOrCreatePerformanceCounter(string scopeName, IDictionary performanceCounters) { if (scopeName == null) throw new ArgumentNullException(nameof(scopeName)); if (performanceCounters.TryGetValue(scopeName, out var performanceCounter)) { return performanceCounter; } performanceCounter = _performanceCounterFactory(); performanceCounter.ScopeName = scopeName; performanceCounters.Add(scopeName, performanceCounter); return performanceCounter; } } }