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

How to reference another value within the same appsettings.json file?

我在 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",
...
      }
    }
...
}

没有。没有对此的支持。不过有两件事:

  1. 虽然每种情况下提供的数据相同,但两者不同。当两者恰好使用相同的数据源时,这不是重复,因为情况可能并非如此。

  2. ConnectionStrings 部分没有什么神奇之处,只是它允许您使用 GetConnectionString 糖。你也可以这样做:

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

    这是否合适是一个单独的讨论。关键是,如果您坚决反对,您 没有 多次获得该值。

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

我专门为此创建了一个 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}",
...
      }
    }
...
}

然后在您的 Startup.cs(或 Program.cs)中添加:

        configuration.EnableTemplatedConfiguration();