字典 属性 到 JSON 中的 Autofac.Configuration 中的嵌套列表

Nested list in dictionary property through Autofac.Configuration in JSON

我使用 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" ]
        }

我必须为此使用其他语法吗?我想配置一个字典,其中的值是项目列表而不是简单的值类型。

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

配置库没有做完整的 "model binding" 来计算 属性 值。这是一种使用更扁平的绑定概念的更简单的机制 - 更接近经典 XML 样式配置支持的内容("key/value pair" 多于 "recursive binding")。

你可以see how we parse dictionaries here。它正在尝试类型转换器并根据值进行转换。

要理解为什么 "just work," 不考虑 Microsoft.Extensions.Configuration 如何解析此配置。该系统的所有 key/value 对:

"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 配置文件尽最大努力尝试 "infer" 每个 属性 的含义,但它不是实际的模型绑定器。在我们最初编写它时,Microsoft.Configuration.Extensions.Binder 内容不存在,当它开始出现时,它并不是我们需要它的地方。既然 .NET Core 已经安定下来,这对我们来说可能是一个更好的选择。

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