2

继有关在 mvc6 中全局使用 IConfiguration的 StackOverflow 问题之后。对已接受答案的评论建议使用

services.Configure<SomeOptions>(Configuration);

现在这适用于以下代码;

班级

public class SomeOptions
{
    public string MyOption { get; set; }
}

配置文件

{
    "MyOption": "OptionValue"
}

启动.cs

public Startup(IHostingEnvironment env)
{
    Configuration = new Configuration()
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();
}

public void ConfigureServices(IServiceCollection services)
{        
    services.Configure<SomeOptions>(Configuration);
}

但是该config.json文件没有任何真正的结构,我希望它看起来更像;

{
    "SomeOptions": {
        "MyOption": "OptionValue"
    }
}

但是,这不会绑定类中的值。无论如何允许这样做吗?

4

3 回答 3

2

如果你想改变config.json结构,你还需要改变你的类结构

{
    "SomeOptions": {
        "MyOption": "OptionValue"
    }
}

映射到类似的东西

public class SomeOptions
{
    public List<MyOption> MyOptions { get; set; }
}

public class MyOption
{
    public string OptionValue { get; set; }
}
于 2014-12-06T10:00:55.637 回答
1

您可以访问 config.json 中的特定值,例如:

Configuration.Get("SomeOptions:MyOption");

哪个返回

"OptionValue"

所以,你的代码将是

services.Configure<SomeOptions>(options => 
        options.MyOption = Configuration.Get("SomeOptions:MyOption"));
于 2015-01-07T14:02:44.403 回答
0
services.Configure<SomeOptions>(Configuration.GetSubKey(nameof(SomeOptions)));

应该这样做。

于 2015-05-15T07:30:22.117 回答