名称中包含句点的.NET Core AppSetting

时间:2017-04-06 16:36:41

标签: asp.net-core

有没有合理的方法在appsettings.json中设置一个名为SomePrefix.MySetting的设置来映射到Asp.NET Core中的POCO字段?我尝试用下划线代替,但这不起作用。也许是一个我不知道的属性......?

2 个答案:

答案 0 :(得分:0)

如果您使用的是1.1版本(我对旧版本不确定),您可以按照以下方式使用:

using Microsoft.Extensions.Configuration;
using System;
using System.IO;

namespace testeCore
{
    class Program
    {
        static void Main(string[] args)
        {

            var config = new ConfigurationBuilder()
                        .SetBasePath(Directory.GetCurrentDirectory())
                        .AddJsonFile("appsettings.json")
                        .Build();
            Console.WriteLine( config["prefix.mysettings:etwas"]);

        }
    }
}
{
  "prefix.mysettings": {
    "etwas": "test"
  }
}

您需要添加" Microsoft.Extensions.Configuration"," Microsoft.Extensions.Configuration.Json"和" Microsoft.Extensions.Configuration.FileExtensions"引用。

答案 1 :(得分:0)

我担心你不能开箱即用。主要原因是通用字典类(Dictionary<string, string>如果更具体)用于处理所有可用设置。所以当你有像

这样的配置源时
{
  "prefix.mysettings": {
    "key1": "value_1"
  },
  "mysetting": {
    "prefix.key2": "value_2"
  }
}

它已被内部转换为

var dict = new Dictionary<string, string>
        {
            {"prefix.mysettings:key1", "value_1"},
            {"mysetting:prefix.key2", "value_2"}
        };

然后这个字典用于填充POCO对象(如果需要)。

因此,由于Dictionary<string, string>类用于存储设置,您始终可以通过直接访问字典中的 Value (这就是@Matheus已经说过了:

var value_1 = config["prefix.mysettings:key1"] 
var value_2 = config["mysetting:prefix.key2"] 

或使用帮助器的方法,如IConfigurationRoot.GetValue<>

var value = Configuration.GetValue<int>("prefix.mysettings:key1", 80);

作为一种选择,您可以考虑自己的自定义配置提供程序的实现,这将生成另一种Keys for Dictionary。例如,将.替换为:,结果将类似于

var dict = new Dictionary<string, string>
        {
            {"prefix:mysettings:key1", "value_1"},
            {"mysetting:prefix:key2", "value_2"}
        };

所以你的前缀将成为一个单独的部分。但说实话,通过修改配置文件可以实现相同的结果。