2016-10-18 12 views
0

Я использую Autofac.Configuration, но я не могу использовать конфигурацию вложенных свойств. Следующий NestedListInDictPropThatDoesNotWork свойство не работает:Вложенный список в словаре свойство через Autofac.Configuration в JSON

"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" ] 
     } 

Должен ли я использовать другой синтаксис для этого? Я хочу настроить словарь, где значение представляет собой список элементов вместо простого типа значения.

ответ

1

Примечание: Перекрестная рассылка as an issue to Autofac. Там будет проведено дальнейшее обсуждение вопроса об осуществлении или сроках.

Конфигурационная библиотека не выполняет полную «привязку модели» для определения значений свойств. Это гораздо более простой механизм, использующий концепцию более плотного привязки - гораздо ближе к тому, что поддерживается классической конфигурацией стиля XML (более «пара ключ/значение», чем «рекурсивная привязка»).

Вы можете 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 делает все возможное, чтобы попытаться «сделать вывод», что означает каждое свойство, но это не фактическая модель связующего. В то время, когда мы изначально писали это, ничего не было, и когда он начал туда попасть, это было не совсем там, где нам это нужно. Это может быть лучшим вариантом для нас сейчас, когда .NET Core немного успокоился.

Мы будем рады принять запрос на вытягивание с обновлением для этой поддержки. Тем временем проблема отмечена как запрос расширения.