我目前正在尝试将appsettings.json
的值读入一个变量。GetSection()
成功地读取了这些值,但一旦我尝试将这些值用于变量,它只会返回null。我找到的解决方案都不起作用。
Json文件
{
"Categories": {
"Over29EUR": [
{
"Status": "DO1",
"CaseMemo": "Over 29",
"CopyOldData": false,
"OverwriteData": false,
"DeleteOldEvent": true,
"NextEvent": "next",
"CaseMemoManualCheck": "",
"Team": "",
"NewStatus": "new"
},
{
"Status": "DO2",
"CaseMemo": "Over 29",
"CopyOldData": false,
"OverwriteData": false,
"DeleteOldEvent": true,
"NextEvent": "next",
"CaseMemoManualCheck": "",
"Team": "",
"NewStatus": "new"
},
{
"Status": "DO3",
"CaseMemo": "Over 29",
"CopyOldData": false,
"OverwriteData": false,
"DeleteOldEvent": true,
"NextEvent": "next",
"CaseMemoManualCheck": "",
"Team": "",
"NewStatus": "new"
}
]
}
}
程序.cs
private static IConfiguration config;
static void Main(string[] args)
{
config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("Resources\\appsettings.json", optional: false)
.Build();
var serviceProvider = new ServiceCollection()
.Configure<ConfigurationFile>(config.GetSection("Categories"))
.AddSingleton<IConfiguration>(Program.config)
.AddSingleton<IOrchestrator, CaseOrchestrator>()
.AddOptions()
.BuildServiceProvider();
var orchestrator = serviceProvider.GetRequiredService<IOrchestrator>();
orchestrator.Execute();
}
班级
public class ConfigurationFile
{
public Categories Categories { get; set; }
}
///////////////////////////////////////////////////////////
public class Categories
{
public Category Over29EUR { get; set; }
public Category Under29EUR { get; set; }
}
///////////////////////////////////////////////////////////
public class Category
{
public List<ZMRCase> ZMRCases { get; set; }
}
///////////////////////////////////////////////////////////
public class ZMRCase
{
public string Status { get; set; }
public string CaseMemo { get; set; }
public bool? CopyOldData { get; set; }
public bool? OverwriteData { get; set; }
public bool? DeleteOldEvent { get; set; }
public string NextEvent { get; set; }
public string CaseMemoManualCheck { get; set; }
public string Team { get; set; }
public string NewStatus { get; set; }
}
Orchestrator(我尝试在其中获取值)
internal class CaseOrchestrator : IOrchestrator
{
private readonly ConfigurationFile _configuration;
public CaseOrchestrator(IOptions<ConfigurationFile> configuration)
{
_configuration = configuration.Value;
}
public void Execute()
{
var x = _configuration;
}
}
谢谢!
3条答案
按热度按时间esyap4oy1#
修复
Categories
模型:另外,如果您正在解析具体的
Categories
部分,那么您也需要省略ConfigurationFile
-Configure<Categories>(config.GetSection("Categories"))
它直接包含2个
ZMRCase
的集合,而没有中间的Category
。3phpmpom2#
因为这不是正确的阶级模式。
正确的应该是这样的:
9rygscc13#
如果添加包Microsoft.Extensions.Configuration.Binder,则可以简化. NET类的使用。
就这么做:
你可以很容易地在cat1和cat2之间循环
另一种写法: