public OutkeepHttpApiHostedService( ILogger <OutkeepHttpApiHostedService> logger, IOptions <OutkeepHttpApiServerOptions> apiOptions, IEnumerable <ILoggerProvider> loggerProviders, IGrainFactory factory) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _options = apiOptions?.Value ?? throw new ArgumentNullException(nameof(apiOptions)); _host = Host .CreateDefaultBuilder() .ConfigureLogging(logging => { logging.ClearProviders(); foreach (var provider in loggerProviders) { logging.AddProvider(provider); } }) .ConfigureWebHostDefaults(web => { web.ConfigureServices(services => { services.AddControllers(); services.AddCors(options => { options.AddDefaultPolicy(policy => { policy .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); }); }); services.AddApiVersioning(options => { options.ReportApiVersions = true; options.DefaultApiVersion = new ApiVersion(1, 0); options.AssumeDefaultVersionWhenUnspecified = true; }); services.AddVersionedApiExplorer(options => { options.GroupNameFormat = "'v'VVV"; }); services.AddSwaggerGen() .AddTransient <IConfigureOptions <SwaggerGenOptions>, SwaggerGenOptionsConfigurator>(); services.AddSingleton(factory); services.AddActivityMiddleware(); }); web.Configure((context, app) => { app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseSwagger(); app.UseSwaggerUI(options => { foreach (var description in app.ApplicationServices.GetRequiredService <IApiVersionDescriptionProvider>().ApiVersionDescriptions.OrderByDescending(v => v.ApiVersion)) { var vx = description.GroupName.ToLowerInvariant(); options.SwaggerEndpoint($"/swagger/{vx}/swagger.json", vx); } }); app.UseActivityMiddleware(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }); if (_options.ApiUri != null) { web.UseUrls(_options.ApiUri.ToString()); } }) .Build(); }
public SwaggerGenOptionsConfigurator(IApiVersionDescriptionProvider provider, IOptions <OutkeepHttpApiServerOptions> options) { this.provider = provider ?? throw new ArgumentNullException(nameof(provider)); this.options = options?.Value ?? throw new ArgumentNullException(nameof(options)); }