无法从appsettings.json读取数据

问题描述 投票:1回答:2

对不起,我确定我有一些基本错误,但我无法发现。单步执行启动代码表明正在正确加载appsettings.json,但测试类的config类为null。

启动:

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"
  }
}

我错过了什么?

c# asp.net-core .net-core asp.net-core-2.0
2个回答
1
投票

当使用IServiceCollection.Configure时,ConfigurationBinder类最终将你的appSettings.json文件中的值绑定到你的EnvironmentConfigonly binds against properties。这意味着您所要做的就是将您的公共领域更改为公共财产:

public class EnvironmentConfig
{
    public string Name { get; set; }
}

2
投票

在使用serives.Configure<T>()配置选项之前,在ConfigureServices方法中添加以下行。要使用“选项”功能,您必须启用它。

services.AddOptions();

© www.soinside.com 2019 - 2024. All rights reserved.