public void StartBackgroundServices() { using (_Logger.LogScope(LogLevel.Debug, "Starting background services")) { lock (_Lock) { if (_Tasks.Any()) { return; } foreach (IBackgroundService backgroundService in _BackgroundServices) { Type backgroundServiceType = backgroundService.GetType(); IFeatureToggleWithDefault featureToggle = _FeatureToggles.GetByKey($"Services/{backgroundServiceType.FullName}").WithDefault(true); var monitor = new BackgroundServiceMonitor( featureToggle, backgroundService, _ApplicationLifetimeManager, _Logger, _TypeHelper); _Tasks.Add(monitor.RunAsync()); } } } }
public BackgroundServiceMonitor( [NotNull] IFeatureToggleWithDefault featureToggle, [NotNull] IBackgroundService backgroundService, [NotNull] IApplicationLifetimeManager applicationLifetimeManager, [NotNull] ILogger logger, [NotNull] ITypeHelper typeHelper) { _FeatureToggle = featureToggle ?? throw new ArgumentNullException(nameof(featureToggle)); _BackgroundService = backgroundService ?? throw new ArgumentNullException(nameof(backgroundService)); _ApplicationLifetimeManager = applicationLifetimeManager ?? throw new ArgumentNullException(nameof(applicationLifetimeManager)); _Logger = logger ?? throw new ArgumentNullException(nameof(logger)); _TypeHelper = typeHelper ?? throw new ArgumentNullException(nameof(typeHelper)); }