Все настройки, входящие в ваш экземпляр IConfiguration
, являются просто парами ключ-значение.Возьмем следующий упрощенный пример JSON:
{
"Roles": [
{ "Name": "Role1", "Subjects": [ "Alice", "Bob" ] },
{ "Name": "Role2", "Subjects": [ "Charlie" ] }
]
}
Хотя это по сути древовидная структура, при добавлении в ваш экземпляр IConfiguration
она сопоставляется со следующими парами ключ-значение (здесь есть некоторые дополнительные пустые значения, но они не являются частью этого обсуждения):
Roles
= Roles:0:Name
= Role1
Roles:0:Subjects:0
= Alice
Roles:0:Subjects:1
= Bob
Roles:1:Name
= Role2
Roles:1:Subjects:0
= Charlie
ВыМожно увидеть, что это имитирует иерархию вашего JSON, где имена являются свойствами объекта, а числа являются индексами в массивах.Первый из них важен: есть ключ Roles
, который не имеет значения, потому что значения могут быть только простыми строками, и он сам по себе является родителем.
Теперь, когда вы добавляете дополнительный файл JSON вIConfiguration
установка экземпляра, он сопоставляется с новым набором пар ключ-значение, которые применяются поверх существующих.Возьмите следующий дополнительный JSON:
{
"Roles": []
}
Это просто перезаписывает существующий ключ Roles
и устанавливает его, ну, в общем, то же значение, которое у него уже есть: ничто .То же самое применимо, если вы используете null
в своем файле JSON - вот как это работает.
С точки зрения решения здесь, я предлагаю посмотреть, можете ли вы переработать свой подход appsettings.json
.Например, вы можете поместить саму конфигурацию роли, например, в файл appsettings.Production.json
и оставить версию по умолчанию пустой, чтобы она не существовала в вашей среде разработки.Другими словами, попробуйте смоделировать свои различные файлы appsettings.json
, чтобы они сами были аддитивными.