@@ -47,8 +47,8 @@ internal WebApplicationBuilder(Assembly callingAssembly, Action<IHostBuilder> co
47
47
48
48
Configuration . SetBasePath ( environment . ContentRootPath ) ;
49
49
Logging = new LoggingBuilder ( Services ) ;
50
- Server = _deferredWebHostBuilder = new DeferredWebHostBuilder ( Configuration , environment ) ;
51
- Host = _deferredHostBuilder = new DeferredHostBuilder ( Configuration , configureHost , environment ) ;
50
+ Server = _deferredWebHostBuilder = new DeferredWebHostBuilder ( Configuration , environment , Services ) ;
51
+ Host = _deferredHostBuilder = new DeferredHostBuilder ( Configuration , configureHost , environment , Services ) ;
52
52
}
53
53
54
54
/// <summary>
@@ -89,6 +89,22 @@ public WebApplication Build()
89
89
{
90
90
WebApplication sourcePipeline = null ;
91
91
92
+ _hostBuilder . ConfigureServices ( services =>
93
+ {
94
+ foreach ( var s in Services )
95
+ {
96
+ services . Add ( s ) ;
97
+ }
98
+ } ) ;
99
+
100
+ _hostBuilder . ConfigureAppConfiguration ( ( hostContext , builder ) =>
101
+ {
102
+ foreach ( var s in Configuration . Sources )
103
+ {
104
+ builder . Sources . Add ( s ) ;
105
+ }
106
+ } ) ;
107
+
92
108
_deferredHostBuilder . ExecuteActions ( _hostBuilder ) ;
93
109
94
110
_hostBuilder . ConfigureWebHostDefaults ( web =>
@@ -163,22 +179,6 @@ public WebApplication Build()
163
179
_deferredWebHostBuilder . ExecuteActions ( web ) ;
164
180
} ) ;
165
181
166
- _hostBuilder . ConfigureServices ( services =>
167
- {
168
- foreach ( var s in Services )
169
- {
170
- services . Add ( s ) ;
171
- }
172
- } ) ;
173
-
174
- _hostBuilder . ConfigureAppConfiguration ( ( hostContext , builder ) =>
175
- {
176
- foreach ( var s in Configuration . Sources )
177
- {
178
- builder . Sources . Add ( s ) ;
179
- }
180
- } ) ;
181
-
182
182
var host = _hostBuilder . Build ( ) ;
183
183
184
184
return sourcePipeline = new WebApplication ( host ) ;
@@ -194,12 +194,15 @@ private class DeferredHostBuilder : IHostBuilder
194
194
195
195
private readonly WebHostEnvironment _environment ;
196
196
private readonly Configuration _configuration ;
197
+ private readonly IServiceCollection _services ;
197
198
198
- public DeferredHostBuilder ( Configuration configuration , Action < IHostBuilder > configureHost , WebHostEnvironment environment )
199
+ public DeferredHostBuilder ( Configuration configuration , Action < IHostBuilder > configureHost , WebHostEnvironment environment , IServiceCollection services )
199
200
{
200
201
_configuration = configuration ;
201
202
_environment = environment ;
202
- _operations += configureHost ;
203
+ _services = services ;
204
+
205
+ configureHost ( this ) ;
203
206
}
204
207
205
208
public IHost Build ( )
@@ -238,7 +241,14 @@ public IHostBuilder ConfigureHostConfiguration(Action<IConfigurationBuilder> con
238
241
239
242
public IHostBuilder ConfigureServices ( Action < HostBuilderContext , IServiceCollection > configureDelegate )
240
243
{
241
- _operations += b => b . ConfigureServices ( configureDelegate ) ;
244
+ // Run these immediately so that they are observable by the imperative code
245
+ configureDelegate ( new HostBuilderContext ( Properties )
246
+ {
247
+ Configuration = _configuration ,
248
+ HostingEnvironment = _environment
249
+ } ,
250
+ _services ) ;
251
+
242
252
return this ;
243
253
}
244
254
@@ -267,11 +277,13 @@ private class DeferredWebHostBuilder : IWebHostBuilder
267
277
private readonly WebHostEnvironment _environment ;
268
278
private readonly Configuration _configuration ;
269
279
private readonly Dictionary < string , string > _settings = new Dictionary < string , string > ( ) ;
280
+ private readonly IServiceCollection _services ;
270
281
271
- public DeferredWebHostBuilder ( Configuration configuration , WebHostEnvironment environment )
282
+ public DeferredWebHostBuilder ( Configuration configuration , WebHostEnvironment environment , IServiceCollection services )
272
283
{
273
284
_configuration = configuration ;
274
285
_environment = environment ;
286
+ _services = services ;
275
287
}
276
288
277
289
IWebHost IWebHostBuilder . Build ( )
@@ -287,7 +299,12 @@ public IWebHostBuilder ConfigureAppConfiguration(Action<WebHostBuilderContext, I
287
299
288
300
public IWebHostBuilder ConfigureServices ( Action < WebHostBuilderContext , IServiceCollection > configureServices )
289
301
{
290
- _operations += b => b . ConfigureServices ( configureServices ) ;
302
+ configureServices ( new WebHostBuilderContext
303
+ {
304
+ Configuration = _configuration ,
305
+ HostingEnvironment = _environment
306
+ } ,
307
+ _services ) ;
291
308
return this ;
292
309
}
293
310
0 commit comments