如何引用同一 appsettings.json 文件中的另一个值?

Get*_*toX 6 json nlog appsettings .net-core asp.net-core

我需要在 appsettings.json 中的两个位置使用数据库连接字符串。

是否可以在 json 文件中引入公共变量或 json-path 相关引用以避免潜在的问题?

如果能在不接触 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",
...
      }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

Rol*_*sen 5

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}",
...
      }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

另请参阅https://github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer


Jav*_*avi 5

我专门为此创建了一个 nuget 包!在这里查看: https: //www.nuget.org/packages/TemplateFormattedConfiguration/

在你的例子中你应该这样做:

{
...
    "ConnectionStrings": {
"Default": "Host=localhost;Database=db;Port=5432;Username=postgres;Password=postgres"
  },
  "Nlog": {
    "targets": {
      "database": {
        "type": "Database",
        "dbProvider": "Npgsql.NpgsqlConnection, Npgsql",
        "connectionString": "{ConnectionStrings:Default}",
...
      }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

在 Startup.cs(或 Program.cs)中,您将添加以下内容:

        configuration.EnableTemplatedConfiguration();
Run Code Online (Sandbox Code Playgroud)