Example #1
0
        internal async Task EnsureConfigurationAsync()
        {
            if (_configuration != null)
            {
                return;
            }

            await _semaphore.WaitAsync();

            try
            {
                if (_configuration != null)
                {
                    return;
                }

                var providers = new List <IConfigurationProvider>();

                if (_configBuilderFactory != null)
                {
                    providers.AddRange(new ConfigurationBuilder()
                                       .AddConfiguration((await _configBuilderFactory.Invoke(_name)).Build())
                                       .Build().Providers);
                }

                if (_configurationProviders != null)
                {
                    providers.AddRange(_configurationProviders);
                }

                _updatableData = new UpdatableDataProvider(_initialData ?? Enumerable.Empty <KeyValuePair <string, string> >());

                providers.Add(_updatableData);

                _configuration = new ConfigurationRoot(providers);
            }
            finally
            {
                _semaphore.Release();
            }
        }