2017-09-02 848 views
1

每次我拨打Configuration.GetSection时,返回对象的Value属性始终为空。Configuration.GetSection总是返回null

Startup构造

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
     .AddEnvironmentVariables(); 

    this.Configuration = builder.Build(); 
} 

ConfigureServices方法

public void ConfigureServices(IServiceCollection services) 
{ 
    services.Configure<SqliteSettings>(opts => Configuration.GetSection("SqliteSettings").Bind(opts)); 

    services.AddOptions(); 

    services.AddMvc(); 
} 

appsettings.json

{ 
    "SqliteSettings": { 
    "DataSource": "C:\\db.sqlite", 
    "NewDatabase": true, 
    "Version": 3 
    } 
} 

类我使用的定义SqliteSettings

public class SqliteSettings 
{ 
    public string DataSource { get; set; } 

    public bool? NewDatabase { get; set; } 

    public int? Version { get; set; } 

    public string Password { get; set; } 

    public long? CacheSize { get; set; } 

    // More properties 
} 

我在想JSON可能需要有相同数量的属性来匹配,或者它可能与数据类型定义有关,但也许这些是完全不相关的。

回答

3

只需修改ConfigureServices方法是像下面

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddOptions(); 

    services.Configure<SqliteSettings>(Configuration.GetSection("SqliteSettings")); 

    services.AddMvc(); 
} 

,它应该工作。

+1

工作对我来说Unforunately,没有工作,但顺序放置可能解决了会在未来发生的错误。 'Configuration.GetSection'仍然返回,'.Value'为空。 –

+0

你能分享你如何调用'.Value'吗? – Ali

+0

要查看我是否获取JSON,只需执行'var x = Configuration.GetSection(“SqliteSettings”);'然后在Visual Studio中检查x,特别是为'Value'。 –

0

这控制台应用程序

var conncetionString = config["ConnectionStrings:DefaultConnection"]