. Net Core 3.1 добавление дополнительной конфигурации. json файл в аргумент конфигурации при запуске - PullRequest
3 голосов
/ 04 марта 2020

Мне нужно добавить другой файл конфигурации в мой проект. Net Core Blazor. В других источниках (таких как this ) упоминается использование компоновщика конфигурации в. Net core 2.2, но, поскольку в 3.1 конфигурация передается в качестве параметра в Startup, у меня нет способа добавить в нее другую конфигурацию как насколько я могу судить. Может быть, я смотрю на это неправильно, но я предполагаю, что конфигурация, переданная в качестве параметра, имеет важные свойства конфигурации, поэтому создание ее самостоятельно с помощью только дополнительного файла конфигурации, похоже, не учитывает эти свойства конфигурации.

Пример: не работает, но должен нарисовать картину того, что я пытаюсь сделать.

public Startup(IConfiguration configuration)
{
      Configuration = configuration;
      var builder = new ConfigurationBuilder(configuration)
              .AddJsonFile("accountconstants.json", optional: true, reloadOnChange: true);
      });
}

Ответы [ 2 ]

4 голосов
/ 04 марта 2020

Вы можете сделать это в Program.cs, т.е. раньше в конвейере, а не в Startup.cs.

Пример:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostContext, config) =>
            {
                var env = hostContext.HostingEnvironment;

                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}
1 голос
/ 04 марта 2020

Ваш подход должен работать, но требует небольшой настройки.

Конфигурацию, которую вы создаете, необходимо добавить в DI-контейнер. Документация для этого здесь .

Я достиг этого также в Azure функциях и других проектах через следующее:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IConfiguration>(provider => new ConfigurationBuilder()
            .AddEnvironmentVariables()
            .AddJsonFile("accountconstants.json", optional: true, reloadOnChange: true)
            .Build());
}
...