有没有合理的方法在appsettings.json中设置一个名为SomePrefix.MySetting的设置来映射到Asp.NET Core中的POCO字段?我尝试用下划线代替,但这不起作用。也许是一个我不知道的属性......?
答案 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"}
};
所以你的前缀将成为一个单独的部分。但说实话,通过修改配置文件可以实现相同的结果。