Невозможно прочитать данные из appsettings.json - PullRequest
0 голосов
/ 15 сентября 2018

Я уверен, что у меня что-то не так, но я не могу это заметить, извините.Если вы войдете в код запуска, это означает, что appsettings.json загружается правильно, но тестовый класс затем получает значение null для класса config.

Запуск:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        var builder = new ConfigurationBuilder().AddJsonFile("appSettings.json");
        Configuration = builder.Build();
    }

    public IConfiguration Configuration { get; set; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().AddSessionStateTempDataProvider();
        services.AddSession();

        services.Configure<EnvironmentConfig>(Configuration.GetSection("EnvironmentConfig"));
    }
}

ConfigTester:

public class ConfigTester
{
    private readonly IOptions<EnvironmentConfig> _environmentConfig;

    public ConfigTester(IOptions<EnvironmentConfig> environmentConfig)
    {
        _environmentConfig = environmentConfig;
    }

    public string ConfigName()
    {
        return _environmentConfig.Value.Name;         //_environmentConfig.Value is set, but Name is null
    }
}

EnvironmentConfig:

public class EnvironmentConfig
{
    public string Name;

}

appSettings.json:

{
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  },
  "EnvironmentConfig": {
    "Name": "develop"
  }
}

Что я пропустил?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

При использовании IServiceCollection.Configure класс ConfigurationBinder, который завершает работу по связыванию значений в вашем файле appSettings.json с вашим EnvironmentConfig классом , связывается только со свойствами . Это означает, что все, что вам нужно сделать, это изменить ваше публичное поле на общедоступное свойство :

public class EnvironmentConfig
{
    public string Name { get; set; }
}
0 голосов
/ 15 сентября 2018

Добавьте следующую строку в метод ConfigureServices перед настройкой параметров с помощью serives.Configure<T>(). Чтобы использовать функцию «Параметры», ее необходимо включить.

services.AddOptions();

...