From 092da1c263ce9f88e7ae6f78844476eeec5ad0eb Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Tue, 8 Oct 2024 23:58:13 +0000 Subject: [PATCH 1/2] Validate scopes in OpenApiDocumentProvider tests and fix scope --- src/OpenApi/src/Services/OpenApiDocumentProvider.cs | 4 +++- .../Services/OpenApiDocumentProviderTests.cs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/OpenApi/src/Services/OpenApiDocumentProvider.cs b/src/OpenApi/src/Services/OpenApiDocumentProvider.cs index 2e8e2c14d721..d20c4649b5ae 100644 --- a/src/OpenApi/src/Services/OpenApiDocumentProvider.cs +++ b/src/OpenApi/src/Services/OpenApiDocumentProvider.cs @@ -25,7 +25,9 @@ internal sealed class OpenApiDocumentProvider(IServiceProvider serviceProvider) /// A text writer associated with the document to write to. public async Task GenerateAsync(string documentName, TextWriter writer) { - var optionsSnapshot = serviceProvider.GetRequiredService>(); + // Resolving IOptionsSnapshot requires a scoped service provider. + using var scopedService = serviceProvider.CreateScope(); + var optionsSnapshot = scopedService.ServiceProvider.GetRequiredService>(); var namedOption = optionsSnapshot.Get(documentName); var resolvedOpenApiVersion = namedOption.OpenApiVersion; await GenerateAsync(documentName, writer, resolvedOpenApiVersion); diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentProviderTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentProviderTests.cs index 04e31fdec7ba..92203c29cc54 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentProviderTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentProviderTests.cs @@ -68,7 +68,7 @@ private static IServiceProvider CreateServiceProvider(string[] documentNames) { serviceCollection.AddOpenApi(documentName); } - var serviceProvider = serviceCollection.BuildServiceProvider(); + var serviceProvider = serviceCollection.BuildServiceProvider(validateScopes: true); return serviceProvider; } } From 3bd55232838a12c8b6902b50fc4f26f1e1990acb Mon Sep 17 00:00:00 2001 From: Safia Abdalla Date: Wed, 9 Oct 2024 04:16:38 +0000 Subject: [PATCH 2/2] Use IOptionsMonitor to resolve OpenApiOptions --- src/OpenApi/src/Services/OpenApiDocumentProvider.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/OpenApi/src/Services/OpenApiDocumentProvider.cs b/src/OpenApi/src/Services/OpenApiDocumentProvider.cs index d20c4649b5ae..d5bec60be52c 100644 --- a/src/OpenApi/src/Services/OpenApiDocumentProvider.cs +++ b/src/OpenApi/src/Services/OpenApiDocumentProvider.cs @@ -25,10 +25,8 @@ internal sealed class OpenApiDocumentProvider(IServiceProvider serviceProvider) /// A text writer associated with the document to write to. public async Task GenerateAsync(string documentName, TextWriter writer) { - // Resolving IOptionsSnapshot requires a scoped service provider. - using var scopedService = serviceProvider.CreateScope(); - var optionsSnapshot = scopedService.ServiceProvider.GetRequiredService>(); - var namedOption = optionsSnapshot.Get(documentName); + var options = serviceProvider.GetRequiredService>(); + var namedOption = options.Get(documentName); var resolvedOpenApiVersion = namedOption.OpenApiVersion; await GenerateAsync(documentName, writer, resolvedOpenApiVersion); }