diff --git a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs index b38bf97f05e37ed135f6db3a7e7e3b29c27c62f1..80c8c76ef43d1b75eb02d3675e52f92b8f10ba8a 100644 --- a/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs +++ b/src/Hosting/Hosting/src/GenericHost/GenericWebHostBuilder.cs @@ -327,7 +327,10 @@ namespace Microsoft.AspNetCore.Hosting.Internal return webHostBuilderContext; } - return (WebHostBuilderContext)contextVal; + // Refresh config, it's periodically updated/replaced + var webHostContext = (WebHostBuilderContext)contextVal; + webHostContext.Configuration = context.Configuration; + return webHostContext; } public string GetSetting(string key) diff --git a/src/Hosting/Hosting/test/WebHostBuilderTests.cs b/src/Hosting/Hosting/test/WebHostBuilderTests.cs index 5fcd8943c2b999e1e7e4109bdf7bab7913066085..fd87f235fd4211826d92e99e9540ded4b5f39a74 100644 --- a/src/Hosting/Hosting/test/WebHostBuilderTests.cs +++ b/src/Hosting/Hosting/test/WebHostBuilderTests.cs @@ -945,6 +945,54 @@ namespace Microsoft.AspNetCore.Hosting } } + [Theory] + [MemberData(nameof(DefaultWebHostBuildersWithConfig))] + public void Build_AppConfigAvailableEverywhere(IWebHostBuilder builder) + { + builder = builder + .CaptureStartupErrors(false) + .ConfigureAppConfiguration((context, configurationBuilder) => { + configurationBuilder.AddInMemoryCollection( + new[] + { + new KeyValuePair<string,string>("appconfig", "appvalue") + }); + }) + .ConfigureLogging((context, logging) => + { + Assert.Equal("appvalue", context.Configuration["appconfig"]); + }) + .ConfigureServices((context, services) => + { + Assert.Equal("appvalue", context.Configuration["appconfig"]); + }) + .UseDefaultServiceProvider((context, services) => + { + Assert.Equal("appvalue", context.Configuration["appconfig"]); + }) + .UseStartup<StartupCheckConfig>() + .UseServer(new TestServer()); + + using (var host = builder.Build()) + { + var configuration = host.Services.GetRequiredService<IConfiguration>(); + Assert.Equal("appvalue", configuration["appconfig"]); + } + } + + public class StartupCheckConfig + { + public StartupCheckConfig(IConfiguration config) + { + Assert.Equal("value", config["testhostingstartup:config"]); + } + + public void Configure(IApplicationBuilder app) + { + + } + } + [Theory] [MemberData(nameof(DefaultWebHostBuildersWithConfig))] public void Build_DoesRunHostingStartupFromPrimaryAssemblyEvenIfNotSpecified(IWebHostBuilder builder)