diff --git a/src/Microsoft.AspNetCore.Hosting/WebHostBuilderExtensions.cs b/src/Microsoft.AspNetCore.Hosting/WebHostBuilderExtensions.cs
index fecc5cc1a7..fa857c897e 100644
--- a/src/Microsoft.AspNetCore.Hosting/WebHostBuilderExtensions.cs
+++ b/src/Microsoft.AspNetCore.Hosting/WebHostBuilderExtensions.cs
@@ -88,10 +88,21 @@ namespace Microsoft.AspNetCore.Hosting
/// The .
public static IWebHostBuilder UseDefaultServiceProvider(this IWebHostBuilder hostBuilder, Action configure)
{
- return hostBuilder.ConfigureServices(services =>
+ return hostBuilder.UseDefaultServiceProvider((context, options) => configure(options));
+ }
+
+ ///
+ /// Configures the default service provider
+ ///
+ /// The to configure.
+ /// A callback used to configure the for the default .
+ /// The .
+ public static IWebHostBuilder UseDefaultServiceProvider(this IWebHostBuilder hostBuilder, Action configure)
+ {
+ return hostBuilder.ConfigureServices((context, services) =>
{
var options = new ServiceProviderOptions();
- configure(options);
+ configure(context, options);
services.Replace(ServiceDescriptor.Singleton>(new DefaultServiceProviderFactory(options)));
});
}
diff --git a/test/Microsoft.AspNetCore.Hosting.Tests/WebHostBuilderTests.cs b/test/Microsoft.AspNetCore.Hosting.Tests/WebHostBuilderTests.cs
index 6993805d92..e5f809f3c5 100644
--- a/test/Microsoft.AspNetCore.Hosting.Tests/WebHostBuilderTests.cs
+++ b/test/Microsoft.AspNetCore.Hosting.Tests/WebHostBuilderTests.cs
@@ -185,6 +185,34 @@ namespace Microsoft.AspNetCore.Hosting
Assert.Throws(() => hostBuilder.Build());
}
+ [Fact]
+ public void ConfigureDefaultServiceProviderWithContext()
+ {
+ var configurationCallbackCalled = false;
+ var hostBuilder = new WebHostBuilder()
+ .UseServer(new TestServer())
+ .ConfigureServices(s =>
+ {
+ s.AddTransient();
+ s.AddScoped();
+ })
+ .Configure(app =>
+ {
+ app.ApplicationServices.GetRequiredService();
+ })
+ .UseDefaultServiceProvider((context, options) =>
+ {
+ Assert.NotNull(context.HostingEnvironment);
+ Assert.NotNull(context.Configuration);
+ Assert.NotNull(context.LoggerFactory);
+ configurationCallbackCalled = true;
+ options.ValidateScopes = true;
+ });
+
+ Assert.Throws(() => hostBuilder.Build());
+ Assert.True(configurationCallbackCalled);
+ }
+
[Fact]
public void UseLoggerFactoryHonored()
{