public AzureKeyVaultSettingsProvider(AzureKeyVaultSettingsProviderOptions options)
        {
            _options = options;
            _config  = _options.ConfigurationManager;
            if (_config != null)
            {
                var providers = _config.GetProviders(Name);

                _config.RegisterSetting(_options.KeyVaultUriKey,
                                        defaultvalue: string.IsNullOrWhiteSpace(_options.KeyVaultUri) ? null : _options.KeyVaultUri,
                                        providers: providers);


                if (options.UseKeyVaultCredentialsKey)
                {
                    _config.RegisterSetting(_options.KeyVaultCredentialsKey,
                                            converter: _options.SecretConverter ?? NoEncrypter,
                                            providers: providers);
                }
                else
                {
                    _config.RegisterSetting(_options.AzureApplicationClientIdKey,
                                            defaultvalue: string.IsNullOrWhiteSpace(_options.ClientId) ? null : _options.ClientId,
                                            providers: providers);
                    _config.RegisterSetting(_options.AzureApplicationClientSecretKey,
                                            defaultvalue: string.IsNullOrWhiteSpace(_options.ClientSecret) ? null : _options.ClientSecret,
                                            converter: _options.SecretConverter ?? NoEncrypter,
                                            providers: providers);
                }
            }

            keyVaultClient = new Lazy <KeyVaultClient>(() =>
            {
                return(new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessToken)));
            });
            allSecrets = new ResetLazy <SecretItem[]>(() =>
            {
                Logger.Trace("Fetching all settings metadata");
                var secrets      = Task.Run(() => this.keyVaultClient.Value.GetSecretsAsync(this.KeyVaultUri)).GetAwaiter().GetResult();
                var secretsValue = secrets.ToArray();
                Logger.TraceFormat("Found {0} settings: {1}", secretsValue.Length, string.Join(", ", secretsValue.Select(s => string.Format("{0}={1}", s.Id, s.Attributes.Updated))));
                return(secretsValue);
            });
        }
        public static ConfigurationManager UseAzureKeyVault(this ConfigurationManager manager, AzureKeyVaultSettingsProviderOptions options)
        {
            // RegisterSetting(AzureKeyVaultDefaults.DefaultAzureADClientSecretKey, converter: CryptoHelper.DecryptEnvelop);

            options.ConfigurationManager = manager;
            manager.AddSettingsProvider(new AzureKeyVaultSettingsProvider(options), options.LoadingOrder);
            return(manager);
        }