Как я могу реализовать IConfigurationProvider, который загружает значения конфигурации из базы данных (по требованию)? - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь создать 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 не запросит значения?

1 Ответ

0 голосов
/ 28 июня 2018

Хорошо, получается, что я должен использовать метод расширения ConfigureAppConfiguration, т.е.

        return WebHost
            .CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((b, c) => c.AddDatabase("connectionString")))
            .UseStartup<Startup>()
            .Build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...