Как сослаться на другое значение в том же файле appsettings.json? - PullRequest
1 голос
/ 16 октября 2019

Мне нужна строка подключения к базе данных в двух местах в appsettings.json.

Можно ли ввести в файл json ссылки на общие переменные или пути json, чтобы избежать потенциальных проблем?

Было бы здорово иметь его, не касаясь кода c #.

{
...
  "ConnectionStrings": {
    "Default": "Host=localhost;Database=db;Port=5432;Username=postgres;Password=postgres"
  },
  "Nlog": {
    "targets": {
      "database": {
        "type": "Database",
        "dbProvider": "Npgsql.NpgsqlConnection, Npgsql",
        "connectionString": "Host=localhost;Database=db;Port=5432;Username=postgres;Password=postgres",
...
      }
    }
...
}

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

NLog имеет возможность поиска значений в appsettings.json. Вы можете сделать это следующим образом: ${configsetting}:

{
...
  "ConnectionStrings": {
    "Default": "Host=localhost;Database=db;Port=5432;Username=postgres;Password=postgres"
  },
  "Nlog": {
    "targets": {
      "database": {
        "type": "Database",
        "dbProvider": "Npgsql.NpgsqlConnection, Npgsql",
        "connectionString": "${configsetting:item=ConnectionStrings.Default}",
...
      }
    }
...
}

См. Также https://github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer

1 голос
/ 16 октября 2019

Нет. Там нет поддержки для этого. Однако две вещи:

  1. Хотя данные, представляемые в каждом случае, одинаковы, две вещи не одинаковы. Это не дублирование, когда оба случайно используют один и тот же источник данных, поскольку это может быть не так.

  2. В разделе ConnectionStrings нет ничего волшебного, кромечто он позволяет использовать сахар GetConnectionString. С таким же успехом вы можете сделать что-то вроде:

    services.AddDbContext(o =>
        o.UseSqlServer(Configuration["Nlog:targets:database:connectionString"]));
    

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

...