使用UseSetting

时间:2019-09-04 12:33:17

标签: c# .net asp.net-core .net-core configuration

我正在使用.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!");
        });
    }
}

1 个答案:

答案 0 :(得分:1)

UseSetting适用于 host 配置,该配置在应用程序配置之前 应用。在您的示例中,是JSON值覆盖了UseSetting值。 UseSetting设置主机配置中的值,该值将被复制到应用程序配置中,然后被JSON值覆盖

使用ConfigureAppConfigurationAddInMemoryCollection获得所需的结果:

WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .ConfigureAppConfiguration((ctx, configurationBuilder) =>
    {
        configurationBuilder.AddInMemoryCollection(new Dictionary<string, string>
        {
            ["Test"] = "code"
        });
    });

通过此设置,调用AddInMemoryCollection中使用的值将覆盖所有其他值(JSON,env等)。