【问题标题】:Configuring properties from config.json using services.Configure使用 services.Configure 从 config.json 配置属性
【发布时间】:2015-02-03 19:16:16
【问题描述】:

从有关 Using IConfiguration globally in mvc6 的 StackOverflow 问题开始。对已接受答案的评论建议使用

services.Configure<SomeOptions>(Configuration);

现在可以正常使用以下代码;

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

config.json

{
    "MyOption": "OptionValue"
}

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

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

【问题讨论】:

    标签: c# asp.net asp.net-core config.json


    【解决方案1】:

    如果您想更改config.json 结构,您还需要更改您的类结构

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

    映射到类似的东西

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

    【讨论】:

    • 您的建议。 MyOptions 为空
    【解决方案2】:

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

    Configuration.Get("SomeOptions:MyOption");
    

    返回

    "OptionValue"
    

    所以,你的代码将是

    services.Configure<SomeOptions>(options => 
            options.MyOption = Configuration.Get("SomeOptions:MyOption"));
    

    【讨论】:

    • 您好 Master19,谢谢。不过,我希望在没有“魔术字符串”的情况下做到这一点。
    【解决方案3】:
    services.Configure<SomeOptions>(Configuration.GetSubKey(nameof(SomeOptions)));
    

    应该这样做。

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多