| File: Transformers\OpenApiOperationTransformerContext.cs | Web Access |
| Project: src\aspnetcore\src\OpenApi\src\Microsoft.AspNetCore.OpenApi.csproj (Microsoft.AspNetCore.OpenApi) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.OpenApi; /// <summary> /// Represents the context in which an OpenAPI operation transformer is executed. /// </summary> public sealed class OpenApiOperationTransformerContext { /// <summary> /// Gets the name of the associated OpenAPI document. /// </summary> public required string DocumentName { get; init; } /// <summary> /// Gets the API description associated with target operation. /// </summary> public required ApiDescription Description { get; init; } /// <summary> /// Gets the application services associated with the current document the target operation is in. /// </summary> public required IServiceProvider ApplicationServices { get; init; } /// <summary> /// Gets the OpenAPI document the current endpoint belongs to. /// </summary> public OpenApiDocument? Document { get; init; } internal IOpenApiSchemaTransformer[] SchemaTransformers { get; init; } = []; /// <summary> /// Gets or creates an <see cref="OpenApiSchema"/> for the specified type. Augments /// the schema with any <see cref="IOpenApiSchemaTransformer"/>s that are registered /// on the document. If <paramref name="parameterDescription"/> is not null, the schema will be /// augmented with the <see cref="ApiParameterDescription"/> information. /// </summary> /// <param name="type">The type for which the schema is being created.</param> /// <param name="parameterDescription">An optional parameter description to augment the schema.</param> /// <param name="cancellationToken">A cancellation token to cancel the operation.</param> /// <returns>A task that represents the asynchronous operation, with a value of type <see cref="OpenApiSchema"/>.</returns> public Task<OpenApiSchema> GetOrCreateSchemaAsync(Type type, ApiParameterDescription? parameterDescription = null, CancellationToken cancellationToken = default) { var schemaService = ApplicationServices.GetRequiredKeyedService<OpenApiSchemaService>(DocumentName); return schemaService.GetOrCreateUnresolvedSchemaAsync( document: Document, type: type, parameterDescription: parameterDescription, scopedServiceProvider: ApplicationServices, schemaTransformers: SchemaTransformers, cancellationToken: cancellationToken); } }