我正在使用.NET Core 2.2(默认模板),并尝试使用UseSetting覆盖配置,但是我无法使其工作。在配置中设置为File的测试值,我想在Code中用相同的值覆盖它,然后在Startup中我想获取覆盖的值。
(本来我试图添加AzureKeyVaultProvider,但是对我来说不起作用,我以这个示例结束)
配置:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"Test": "file"
}
Program.cs:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSetting("Test", "code");
}
Startup.cs:
public class Startup
{
private readonly IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
var value = _configuration.GetValue<string>("Test");
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
答案 0 :(得分:1)
UseSetting
适用于 host 配置,该配置在应用程序配置之前 应用。在您的示例中,是JSON值覆盖了UseSetting
值。 UseSetting
设置主机配置中的值,该值将被复制到应用程序配置中,然后被JSON值覆盖。
使用ConfigureAppConfiguration
和AddInMemoryCollection
获得所需的结果:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((ctx, configurationBuilder) =>
{
configurationBuilder.AddInMemoryCollection(new Dictionary<string, string>
{
["Test"] = "code"
});
});
通过此设置,调用AddInMemoryCollection
中使用的值将覆盖所有其他值(JSON,env等)。