通过Autofac在字典属性中嵌套列表.JSON格式的配置
本文关键字:JSON 列表 格式 配置 嵌套 Autofac 字典 属性 通过 | 更新日期: 2023-09-27 18:13:38
我使用autoface。配置,但我不能使用嵌套属性配置。下面的属性NestedListInDictPropThatDoesNotWork不起作用:
"type": "Some.Modules.CoolModule, Some.Modules",
"properties": {
"StringProp": "hello world",
"IntProp": 8090,
"BoolProp": false,
"DictProp": { "key": "value" },
"ListProp": [1, 2, 3, 4, 5],
"NestedListInDictPropThatDoesNotWork": {
"myKey": [ "A", "B" ]
}
我必须使用其他语法吗?我想配置一个Dictionary,其中的值是一个项目的List,而不是一个简单的值类型。
注:交叉张贴作为Autofac问题。
配置库没有做完整的"模型绑定"来计算属性值。这是一种更简单的机制,使用更扁平的绑定概念——更接近于经典XML样式配置所支持的(更多的是"键/值对"而不是"递归绑定")。
你可以看到我们是如何解析字典的。它正在尝试类型转换和对值进行强制转换。
要理解为什么这不是"just work ",想想Microsoft.Extensions.Configuration是如何解析这个配置的。这个系统中所有的键/值对:
"type" = "Some.Modules.CoolModule, Some.Modules"
"properties:StringProp" = "hello world"
"properties:IntProp" = "8090"
"properties:BoolProp": "false"
"properties:DictProp:key": "value"
"properties:ListProp:0" = "1"
"properties:ListProp:1" = "2"
"properties:ListProp:2" = "3"
"properties:ListProp:3" = "4"
"properties:ListProp:4" = "5"
"properties:NestedListInDictPropThatDoesNotWork:myKey:0" ="A"
"properties:NestedListInDictPropThatDoesNotWork:myKey:1" ="B"
Autofac的配置尽其所能地"推断"每个属性的含义,但它并不是一个真正的模型绑定器。在我们最初编写它的时候,Microsoft.Configuration.Extensions.Binder之类的东西还不存在,当它开始出现的时候,它还不是我们所需要的。这对我们来说可能是一个更好的选择,因为。net Core已经稳定下来了。
我们很乐意接受拉请求与此支持的更新。同时,这个问题被标记为一个增强请求。