@@ -12,32 +12,33 @@ internal sealed class AggregateKeyedServiceProvider : IKeyedServiceProvider, IDi
1212{
1313 private readonly IServiceCollection services ;
1414 private readonly SemaphoreSlim semaphore = new SemaphoreSlim ( 1 , 1 ) ;
15-
16- private IServiceProvider serviceProvider ;
15+ private readonly IServiceProvider originalServiceProvider ;
16+ private IServiceProvider activeServiceProvider ;
1717 private bool initialized ;
1818 private int ? initializingThreadId ;
1919
2020 public AggregateKeyedServiceProvider ( IServiceProvider serviceProvider , IServiceCollection services )
2121 {
2222 this . services = services ;
23- this . serviceProvider = serviceProvider ;
23+ originalServiceProvider = serviceProvider ;
24+ activeServiceProvider = serviceProvider ;
2425 var lifetime = serviceProvider . GetRequiredService < IHostApplicationLifetime > ( ) ;
25- lifetime . ApplicationStarted . Register ( ( ) => EnsureInitialized ( true ) ) ;
26+ lifetime . ApplicationStarted . Register ( ( ) => EnsureInitialized ( true ) ) ;
2627 }
2728
2829 private IServiceProvider ServiceProvider
2930 {
3031 get
3132 {
32- EnsureInitialized ( false ) ;
33- return serviceProvider ;
33+ EnsureInitialized ( false ) ;
34+ return activeServiceProvider ;
3435 }
3536 }
3637
37- private void EnsureInitialized ( bool isReady )
38+ private void EnsureInitialized ( bool isReady )
3839 {
3940 // If already initialized, we can return immediately.
40- if ( initialized )
41+ if ( initialized )
4142 {
4243 return ;
4344 }
@@ -57,7 +58,7 @@ private void EnsureInitialized(bool isReady)
5758 }
5859
5960 initializingThreadId = Environment . CurrentManagedThreadId ;
60- var provider = serviceProvider . GetRequiredService < IApiVersionDescriptionProvider > ( ) ;
61+ var provider = activeServiceProvider . GetRequiredService < IApiVersionDescriptionProvider > ( ) ;
6162
6263 var collection = new ServiceCollection ( ) ;
6364 foreach ( var descriptor in services )
@@ -73,7 +74,7 @@ private void EnsureInitialized(bool isReady)
7374 collection . AddOpenApi ( description . GroupName ) ;
7475 }
7576
76- serviceProvider = collection . BuildServiceProvider ( ) ;
77+ activeServiceProvider = collection . BuildServiceProvider ( ) ;
7778 initialized = true ;
7879 initializingThreadId = null ;
7980 }
@@ -94,7 +95,7 @@ public object GetRequiredKeyedService( Type serviceType, object? serviceKey )
9495 }
9596
9697 public object ? GetService ( Type serviceType )
97- => ServiceProvider . GetService ( serviceType ) ;
98+ => originalServiceProvider . GetService ( serviceType ) ?? ServiceProvider . GetService ( serviceType ) ;
9899
99100 public void Dispose ( )
100101 {
0 commit comments