Я пытаюсь создать IConfigurationProvider (и IConfigurationSource) для ASP.NET Core 2.1, который будет извлекать данные конфигурации из базы данных.
Я посмотрел несколько примеров (https://msdn.microsoft.com/en-us/magazine/mt814420.aspx, https://github.com/wintoncode/Winton.Extensions.Configuration.Consul/blob/master/src/Winton.Extensions.Configuration.Consul/ConsulConfigurationProvider.cs), но кажется, что они загружают конфигурацию «заранее». Т.е. они загружают всю конфигурацию в память, прежде чем запрашиваются какие-либо значения конфигурации .
Я пытаюсь выяснить, как запрашивать базу данных конфигурации «по требованию», например, когда вызывается Configuraiton.GetValues («xxx»).
Мой класс Program.cs выглядит следующим образом
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddDatabase("connectionString")
.Build();
var key = config.AsEnumerable();
return WebHost
.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseStartup<Startup>()
.Build();
}
Проблема, похоже, связана с методом расширения UseConfiguration, который просто перечисляет коллекцию конфигурации и добавляет значения в тот момент времени.
public static IWebHostBuilder UseConfiguration(this IWebHostBuilder hostBuilder, IConfiguration configuration)
{
foreach (KeyValuePair<string, string> keyValuePair in configuration.AsEnumerable())
hostBuilder.UseSetting(keyValuePair.Key, keyValuePair.Value);
return hostBuilder;
}
Есть ли способ отложить загрузку конфигурации, например, до тех пор, пока класс Startup.cs не запросит значения?