通过JSON中的Autofac.Configuration在字典属性中嵌套列表

时间:2016-10-18 13:16:16

标签: c# json autofac autofac-module autofac-configuration

我使用Autofac.Configuration但我无法使用嵌套属性配置。以下属性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,其中值是项目列表而不是简单的值类型。

1 个答案:

答案 0 :(得分:1)

注意:交叉发布as an issue to Autofac。有关实施或时间表的进一步讨论将在那里进行。

配置库没有做完整的"模型绑定"找出财产价值。它是一种使用更平坦的绑定概念的更简单的机制 - 更接近于支持的经典XML样式配置(更多"键/值对"比#34;递归绑定")。 / p>

你可以see how we parse dictionaries here。它尝试使用类型转换器并对值进行转换。

要理解为什么这不起作用,"考虑一下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已经稳定下来了。

我们很乐意接受带有此支持更新的请求。与此同时,该问题被标记为增强请求。