From 6d42b2fe86b7620f372cedeef494dd63aeb0df1a Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Tue, 25 Apr 2017 10:08:44 -0700 Subject: [PATCH] Expose WebHostBuilderContext in UseDefaultServiceProvider (#1043) --- .../WebHostBuilderExtensions.cs | 15 ++++++++-- .../WebHostBuilderTests.cs | 28 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) 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() {