Проблема чтения из другого файла appsetting в IConfiguration - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть проект webapi в. net Core 3.1, а также у меня есть 2 файла appsettings appsettings.json и appsettingsTest.json

appsettings. json файл:

{
"Section": {
"Mofid": "appSettings.json"
}
}

appsettingsTest. json file:

{
"Section": {
    "Mofid": "appSettingsTest.json"
}
}

Я написал этот код в конструкторе startup.cs class

public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {

        configuration = new ConfigurationBuilder().SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettingsTest.json")
            .Build();

        Configuration = configuration;
    }

В контроллер я ввел IOptins<T> и IConfiguration и I есть 2 действия.

Первое действие читает значение настройки с помощью IOptions, а другое читает значение из IConfiguration

public class WeatherForecastController : ControllerBase
{
    private readonly IConfiguration _configuration;
    private readonly MofidOption _option;

    public WeatherForecastController(
        IOptions<MofidOption> options,
        IConfiguration configuration
        )
    {
        _option = options.Value;
        _configuration = configuration;
    }

    [HttpGet]
    public string Get1()
    {
        return _option.Mofid; //read from appsettingsTest.json
    }


    [HttpGet]
    public string Get2()
    {
        return _configuration["Section:Mofid"]; //read from appsettings.json
    }
}

Моя проблема в том, что IConfiguration читает из appsettings.json и IOptions читает из appsettingsTest.json

Я хочу IConfiguration читает из appsettingsTest.json

Как я могу это сделать?

1 Ответ

1 голос
/ 27 апреля 2020

Если вы измените конфигурацию в конструкторе запуска, вам нужно будет зарегистрировать ее в DI framework.

services.AddSingleton<IConfiguration>(Configuration);

В идеале вам следует изменить конфигурацию из метода CreateHostBuilder.

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.AddJsonFile("MyConfig.json",
                optional: true,
                reloadOnChange: true);
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...