From f17142b2ec901e29e0fe2c8cd38ad383171fcf23 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Mon, 24 Sep 2018 10:41:30 -0700 Subject: [PATCH] Delay resolution until after application services are built (#1553) - Resolve the logger from the right service provider to log duplicate hosting startup assemblies. - Don't create a 3rd IServiceProvider if we resolved the default implementation. --- .../WebHostBuilder.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.AspNetCore.Hosting/WebHostBuilder.cs b/src/Microsoft.AspNetCore.Hosting/WebHostBuilder.cs index 423b898cec..2238bd3b9b 100644 --- a/src/Microsoft.AspNetCore.Hosting/WebHostBuilder.cs +++ b/src/Microsoft.AspNetCore.Hosting/WebHostBuilder.cs @@ -174,13 +174,6 @@ namespace Microsoft.AspNetCore.Hosting } } - var logger = hostingServiceProvider.GetRequiredService>(); - // Warn about duplicate HostingStartupAssemblies - foreach (var assemblyName in _options.GetFinalHostingStartupAssemblies().GroupBy(a => a, StringComparer.OrdinalIgnoreCase).Where(g => g.Count() > 1)) - { - logger.LogWarning($"The assembly {assemblyName} was specified multiple times. Hosting startup assemblies should only be specified once."); - } - AddApplicationServices(applicationServices, hostingServiceProvider); var host = new WebHost( @@ -193,6 +186,14 @@ namespace Microsoft.AspNetCore.Hosting { host.Initialize(); + var logger = host.Services.GetRequiredService>(); + + // Warn about duplicate HostingStartupAssemblies + foreach (var assemblyName in _options.GetFinalHostingStartupAssemblies().GroupBy(a => a, StringComparer.OrdinalIgnoreCase).Where(g => g.Count() > 1)) + { + logger.LogWarning($"The assembly {assemblyName} was specified multiple times. Hosting startup assemblies should only be specified once."); + } + return host; } catch @@ -208,7 +209,7 @@ namespace Microsoft.AspNetCore.Hosting var provider = collection.BuildServiceProvider(); var factory = provider.GetService>(); - if (factory != null) + if (factory != null && !(factory is DefaultServiceProviderFactory)) { using (provider) {