0

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

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

4

1 回答 1

1

注意:作为问题交叉发布到 Autofac 。关于实施或时间表的进一步讨论将在那里进行。

配置库没有进行完整的“模型绑定”来计算属性值。这是一种使用更扁平的绑定概念的更简单的机制——更接近于经典 XML 样式配置所支持的内容(更多的是“键/值对”而不是“递归绑定”)。

您可以在此处查看我们如何解析字典。它正在尝试类型转换器并强制转换值。

要了解为什么这不能“正常工作”,请考虑 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 已经稳定下来了,这对我们来说可能是一个更好的选择。

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

于 2016-10-19T15:26:33.757 回答