Как заменить элементы списка в пользовательском файле appsettings.json? - PullRequest
0 голосов
/ 30 января 2019

У меня есть собственные файлы appsettings.json для каждой среды, поэтому appsettings.Dev.json, appsettings.Test.json, appsettings.Prod.json.В основном appsettings.json у меня есть следующий код:

  "EmailSettings": {
    "Recipients": [
      "person@test.com"
    ]
  }

Затем в пользовательском файле json я хочу переопределить этот список, например:

  "EmailSettings": {
    "Recipients": [
      "anotherperson@test.com"
    ]
  }

Но вместо этогоэто добавляется следующим образом:

  "EmailSettings": {
    "Recipients": [
      "person@test.com",
      "anotherperson@test.com"
    ]
  }

Со всеми другими типами настроек они заменяются, но по некоторым причинам кажется, что списки в файлах пользовательских настроек добавляются вместо этого.С .net вы имели больше гранулярности с xslt, чтобы иметь возможность определять, хотите ли вы заменить или добавить переопределенные настройки.Любые предложения здесь?

РЕШЕНИЕ (для меня)

Я сделал это, и он заменяется в пользовательских настройках JSON.Основной appsettings.json:

  "EmailSettings": {
    "Recipients:0": "person@test.com"
  }

Затем в файле пользовательских настроек:

  "EmailSettings": {
    "Recipients:0": "anotherperson@test.com"
  }

Спасибо за ответы!

1 Ответ

0 голосов
/ 30 января 2019

В appsettings.Test.json используйте следующее

"EmailSettings:Recipients:0" : "anotherperson@test.com"

API конфигурации способен поддерживать иерархические данные конфигурации, сглаживая иерархические данные с использованием разделителя в конфигурацииkeys.

Вам необходимо определить класс настроек электронной почты, например

   public class EmailSettings
    {
        public List<string> Recipients { get; set; }
    }

, и подключить DI, чтобы добавить опции в метод Configure в Startup class

public void ConfigureServices(IServiceCollection services)
        {
            // add Options
            services.AddOptions();
            services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
...