Skip to content

Update API Versions auto-discovery sample #422

Closed
@cd21h

Description

@cd21h

Swashbuckle 4 uses IOptions pattern, so creating temporary container
is not required anymore.

This can be done using IConfigureOptions

    public interface ISwaggerVersionInfoProvider
    {
        Info GetVersionInfo(ApiVersionDescription apiDescription);
    }

    public class SwaggerVersionAutoDiscovery : IConfigureOptions<SwaggerGenOptions>
    {
        private readonly IApiVersionDescriptionProvider _versionDescriptionProvider;
        private readonly ISwaggerVersionInfoProvider _swaggerVersionInfoProvider;

        public SwaggerVersionAutoDiscovery(IApiVersionDescriptionProvider versionDescriptionProvider, 
            ISwaggerVersionInfoProvider swaggerVersionInfoProvider)
        {
            _versionDescriptionProvider = versionDescriptionProvider ?? throw new ArgumentNullException(nameof(versionDescriptionProvider));
            _swaggerVersionInfoProvider = swaggerVersionInfoProvider ?? throw new ArgumentNullException(nameof(swaggerVersionInfoProvider));
        }

        public void Configure(SwaggerGenOptions options)
        {
            foreach (var description in _versionDescriptionProvider.ApiVersionDescriptions)
            {
                options.SwaggerDoc(description.GroupName, _swaggerVersionInfoProvider.GetVersionInfo(description));
            }
        }
    }

Startup.cs code

// todo: register your ISwaggerVersionInfoProvider implementation
// services.Add(...);
// Add SwaggerGenOptions configurator
services.AddTransient<IConfigureOptions<SwaggerGenOptions>, SwaggerVersionAutoDiscovery>();

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions