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));
 }