如何在同一个 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",
...
}
}
...
}
没有。没有对此的支持。不过有两件事:
虽然每种情况下提供的数据相同,但两者不同。当两者恰好使用相同的数据源时,这不是重复,因为情况可能并非如此。
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();
我在 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",
...
}
}
...
}
没有。没有对此的支持。不过有两件事:
虽然每种情况下提供的数据相同,但两者不同。当两者恰好使用相同的数据源时,这不是重复,因为情况可能并非如此。
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();