Skip to content

Commit bcaf2e8

Browse files
committed
Adjust
1 parent 888f90e commit bcaf2e8

1 file changed

Lines changed: 12 additions & 11 deletions

File tree

src/AspNetCore/WebApi/src/Asp.Versioning.OpenApi/DependencyInjection/AggregateKeyedServiceProvider.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)