尝试从多个提供程序读取.Net Core 2.0项目中的配置时,我无法获得所需的结果。
我将以下NuGet包添加到股票.Net Core C#项目中以读取配置。两者都安装了版本2.0.2
。
安装包Microsoft.Extensions.Configuration.Binder
Install-Package Microsoft.Extensions.Configuration.Json
这是演示问题的代码。
class Program
{
static void Main(string[] args)
{
var InMemoryValue = new Dictionary<string, string>()
{
["Configuration.Test1"] = "IndexerValue1",
["Configuration.Test2"] = "IndexerValue2",
};
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder
.AddInMemoryCollection(InMemoryValue)
.AddJsonFile("Config.json")
;
var configuration = configurationBuilder.Build();
Console.WriteLine("Indexer");
Console.WriteLine($" Test1:{configuration["Configuration.Test1"]}");
Console.WriteLine($" Test2:{configuration["Configuration.Test2"]}");
Console.WriteLine($" Test3:{configuration["Configuration.Test3"]}");
var getConfig = configuration.Get<Configuration>();
Console.WriteLine("Get");
Console.WriteLine($" Test1:{getConfig.Test1}");
Console.WriteLine($" Test2:{getConfig.Test2}");
Console.WriteLine($" Test3:{getConfig.Test3}");
var bindConfig = new Configuration();
configuration.GetSection("Configuration").Bind(bindConfig);
Console.WriteLine("Bind");
Console.WriteLine($" Test1:{bindConfig.Test1}");
Console.WriteLine($" Test2:{bindConfig.Test2}");
Console.WriteLine($" Test3:{bindConfig.Test3}");
Console.Write("Press [Enter] to end.");
Console.Read();
}
private class Configuration
{
public string Test1 { get; set; }
public string Test2 { get; set; }
public string Test3 { get; set; }
}
}
以下是Config.json
文件的内容。
{
"Configuration": {
"Test1": "JsonValue1",
"Test3": "JsonValue3"
}
}
最后,这是输出。
Indexer
Test1:IndexerValue1
Test2:IndexerValue2
Test3:
Get
Test1:
Test2:
Test3:
Bind
Test1:JsonValue1
Test2:
Test3:JsonValue3
Press [Enter] to end.
据我了解,我相信我应该在每个部分都获得JsonValue1
,IndexerValue2
和JsonValue3
。
任何线索将不胜感激。
答案 0 :(得分:2)
如评论中所述......更改对冒号的引用,并省略第二种情况。这似乎是多余的。这是我想出的代码。
class Program
{
static void Main(string[] args)
{
var InMemoryValue = new Dictionary<string, string>()
{
["Configuration:Test1"] = "IndexerValue1",
["Configuration:Test2"] = "IndexerValue2",
};
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder
.AddInMemoryCollection(InMemoryValue)
.AddJsonFile("Config.json")
;
var configuration = configurationBuilder.Build();
Console.WriteLine("Indexer");
Console.WriteLine($" Test1:{configuration["Configuration:Test1"]}");
Console.WriteLine($" Test2:{configuration["Configuration:Test2"]}");
Console.WriteLine($" Test3:{configuration["Configuration:Test3"]}");
var bindConfig = new Configuration();
configuration.GetSection("Configuration").Bind(bindConfig);
Console.WriteLine("Bind");
Console.WriteLine($" Test1:{bindConfig.Test1}");
Console.WriteLine($" Test2:{bindConfig.Test2}");
Console.WriteLine($" Test3:{bindConfig.Test3}");
Console.Write("Press [Enter] to end.");
Console.Read();
}
public class Configuration
{
public string Test1 { get; set; }
public string Test2 { get; set; }
public string Test3 { get; set; }
}
}