@@ -20,7 +20,7 @@ internal class BootstrapHostBuilder : IHostBuilder
2020 private readonly List < Action < HostBuilderContext , IConfigurationBuilder > > _configureAppActions = new ( ) ;
2121 private readonly List < Action < HostBuilderContext , IServiceCollection > > _configureServicesActions = new ( ) ;
2222
23- private readonly List < Action < IHostBuilder > > _delayUntilBuildActions = new ( ) ;
23+ private readonly List < Action < IHostBuilder > > _remainingOperations = new ( ) ;
2424
2525 public BootstrapHostBuilder ( ConfigurationManager configuration , WebHostEnvironment webHostEnvironment , IServiceCollection serviceCollection )
2626 {
@@ -58,7 +58,7 @@ public IHostBuilder ConfigureContainer<TContainerBuilder>(Action<HostBuilderCont
5858 throw new ArgumentNullException ( nameof ( configureDelegate ) ) ;
5959 }
6060
61- _delayUntilBuildActions . Add ( hostBuilder => hostBuilder . ConfigureContainer < TContainerBuilder > ( configureDelegate ) ) ;
61+ _remainingOperations . Add ( hostBuilder => hostBuilder . ConfigureContainer < TContainerBuilder > ( configureDelegate ) ) ;
6262 return this ;
6363 }
6464
@@ -89,7 +89,7 @@ public IHostBuilder UseServiceProviderFactory<TContainerBuilder>(IServiceProvide
8989 throw new ArgumentNullException ( nameof ( factory ) ) ;
9090 }
9191
92- _delayUntilBuildActions . Add ( hostBuilder => hostBuilder . UseServiceProviderFactory < TContainerBuilder > ( factory ) ) ;
92+ _remainingOperations . Add ( hostBuilder => hostBuilder . UseServiceProviderFactory < TContainerBuilder > ( factory ) ) ;
9393 return this ;
9494 }
9595
@@ -102,12 +102,17 @@ public IHostBuilder UseServiceProviderFactory<TContainerBuilder>(Func<HostBuilde
102102 throw new ArgumentNullException ( nameof ( factory ) ) ;
103103 }
104104
105- _delayUntilBuildActions . Add ( hostBuilder => hostBuilder . UseServiceProviderFactory < TContainerBuilder > ( factory ) ) ;
105+ _remainingOperations . Add ( hostBuilder => hostBuilder . UseServiceProviderFactory < TContainerBuilder > ( factory ) ) ;
106106 return this ;
107107 }
108108
109- public void RunDefaultCallbacks ( )
109+ public void RunDefaultCallbacks ( HostBuilder innerBuilder )
110110 {
111+ // This is called twice. Once in the WebApplicationBuilde ctor and again in Build() after
112+ // WebHostBuilderExtensions.Configure(ConfigureApplication) is called on a GenericWebHostBuilder
113+ // that was captured in a ConfigureWebHostDeafaults() callback in the ctor.
114+
115+ // We clear the Lists so Actions run in the constructor don't get run again during Build().
111116 foreach ( var configureHostAction in _configureHostActions )
112117 {
113118 configureHostAction ( _configuration ) ;
@@ -131,19 +136,12 @@ public void RunDefaultCallbacks()
131136 configureServicesAction ( _hostContext , _serviceCollection ) ;
132137 }
133138 _configureServicesActions . Clear ( ) ;
134- }
135-
136- public void RunDelayedCallbacks ( IHostBuilder innerBuilder )
137- {
138- // This will only run callbacks added by WebApplicationBuilder.Build().
139- // Other callbacks were run and cleared in the WebApplicationBuilder ctor.
140- RunDefaultCallbacks ( ) ;
141139
142- foreach ( var callback in _delayUntilBuildActions )
140+ foreach ( var callback in _remainingOperations )
143141 {
144142 callback ( innerBuilder ) ;
145143 }
146- _delayUntilBuildActions . Clear ( ) ;
144+ _remainingOperations . Clear ( ) ;
147145 }
148146 }
149147}
0 commit comments