我要为我的ASP.NET Core项目使用JSON配置,如此处记录:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2
我的配置如下所示:
config
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{commandConfig["Site"]}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
在每个appsettings.<site>.json
中,我可以这样:
{
"Site": "siteName1"
}
但这似乎是一种浪费。我要把它放在appsettings.json
中:
{
"Site": "$(Site)"
}
并让变量替换适当地替换$(Site)
。
像这样可能吗?
答案 0 :(得分:2)
我为此目的创建了一个库,它完全符合您的期望。参见:https://github.com/molinch/ConfigurationSubstitutor 您只需要将其注册为另一个配置源即可。
例如,如果您在配置中定义了以下三个条目:
从配置中请求Foo时,您将获得:Barista-Jean-Barista
答案 1 :(得分:1)
我不确定是否可行。
我建议使用环境变量:
var mySiteVariable = Environment.GetEnvironmentVariable("MySiteVariable");
config
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{mySiteVariable}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
更新:
如果您不想使用其他json文件,则可以使用AddInMemoryCollection
。链中后期添加的配置将覆盖链中较早配置中的变量。
config.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddInMemoryCollection(new Dictionary<string, string>()
{
{"MyConfigVariable", "overwrite with this value"}
});
没有内置的方法可以执行所需的操作。如果您确实愿意,您总是可以自己读取和解析json文件。