Как удалить узел в appsettings.json, используя appsettings.Development.json? - PullRequest
0 голосов
/ 18 октября 2018

Я немного борюсь с тем, как appsettings.Development.json переопределяет или иначе сливает с appsettings.json.Я не уверен, как «очистить» узел от appsettings.json с помощью файла appsettings.Development.json.

Для справки, я использую конструктор по умолчанию, как показано здесь https://github.com/aspnet/MetaPackages/blob/rel/2.0.0-preview1/src/Microsoft.AspNetCore/WebHost.cs#L159-L160

appsettings.json

{
  "Policy": {
    "roles": [
      {
        "name": "inventoryAdmin",
        "subjects": [ "bob", "alice" ],
        "identityRoles": [ "ActiveDirectory-Role-Manager" ]
      },
  ]
 }
}

Учитывая этот пример, почему я не могу сделать следующее в моем:

appsettings.Development.Json:

{ "Policy": { "Roles": [] } }

или

{ "Policy": { "Roles": null } }

Когда я проверяю вывод с помощью чего-то вроде Configuration.Get<PolicyServer.Local.Policy>().Roles, я все равно получаю 3 роли назад.

Этот вопрос, надеюсь, поможет мне понять, как я могу переопределить узел ине просто очистить это.Так что я надеюсь начать с простого и работать там.

1 Ответ

0 голосов
/ 19 октября 2018

Все настройки, входящие в ваш экземпляр 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, чтобы они сами были аддитивными.

...