internal ConfigurationProvider(
            Action <Exception> errorCallback,
            Action <object, IConfigurationSource> settingsCallback,
            IObservableBinder observableBinder,
            ISourceDataCache sourceDataCache,
            ICurrentValueProviderFactory currentValueProviderFactory,
            TimeSpan sourceRetryCooldown = default)
        {
            this.errorCallback               = new ErrorCallbackDecorator(errorCallback).Invoke;
            this.settingsCallback            = new SettingsCallbackDecorator(settingsCallback, this.errorCallback).Invoke;
            this.observableBinder            = observableBinder;
            this.sourceDataCache             = sourceDataCache;
            this.currentValueProviderFactory = currentValueProviderFactory;
            this.sourceRetryCooldown         = sourceRetryCooldown;

            baseScheduler = new EventLoopScheduler();
            scheduler     = baseScheduler.Catch <Exception>(
                exception =>
            {
                this.errorCallback(exception);
                return(true);
            });
        }