.net Core Access appsettings.json при настройке другого поставщика конфигурации - PullRequest
0 голосов
/ 07 ноября 2018

Я только начинаю работу с .net Core 2.1, и я написал собственный ConfigurationProvider, который загружает мою конфиденциальную конфигурацию из отдельного файла. Это прекрасно работает с жестко заданным путем, но я также хочу, чтобы местоположение файла было сохранено в конфигурации. Если я пытаюсь получить доступ к конфигурации appsettings во время настройки моего провайдера, значения не отображаются. Предположительно, это потому, что я все еще на этапе настройки. Есть ли способ получить к ним доступ или потерпеть неудачу, и есть ли способ добавить другого поставщика конфигурации в Startup.cs вместо Program.cs?

Вот что я пытаюсь сделать:

public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
    return WebHost.CreateDefaultBuilder(args)
                    .ConfigureLogging((hostingContext, logging) =>
                    {
                        logging.ClearProviders();
                        logging.AddConsole();
                        logging.AddFile(opts =>
                        {
                            hostingContext.Configuration.GetSection("FileLoggerOptions").Bind(opts);
                        });
                    })
                    .ConfigureAppConfiguration((hostingContext, config) =>
                    {
                        config.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath);
                        config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                        config.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true);
                        config.AddEncryptedFile(hostingContext.Configuration["SecureSettingsFile"], true, true);
                    })
                    .UseStartup<Startup>();
}

Как вы видите, я могу получить доступ к конфигурации в конфигурации журнала, но не к конфигурации приложения. Мой провайдер - AddEncryptedFile бит, и hostingContext.Configuration["SecureSettingsFile"] должен прочитать значение из appsettings.json.

Единственная конфигурация, доступная на этом этапе, - это переменные среды, и я не хочу использовать их, поскольку на сервере имеется около 30 веб-сайтов.

Возможно ли то, что я пытаюсь сделать, или мне придется использовать переменную окружения или сохранить мою зашифрованную конфигурацию в том же месте, что и мой веб-сайт?

спасибо

1 Ответ

0 голосов
/ 07 ноября 2018

Вам нужно будет использовать ConfigurationBuilder, чтобы сначала просто прочитать appsettings.json, и использовать выходные данные компоновщика, чтобы выполнить полную настройку. Примерно так:

.ConfigureAppConfiguration((hostingContext, config) =>
{
    var baseConfig = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .Build();
    var secureSettingsFile = baseConfig.GetValue<string>("SecureSettingsFile");

    /* ... */
    config.AddEncryptedFile(secureSettingsFile, true, true);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...