From ce0d2ecdd49b58cee4ea3691a3a9d75b43a1d308 Mon Sep 17 00:00:00 2001 From: wangjun Date: Thu, 13 Jul 2023 11:12:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20swagger.json=E5=8A=A0=E8=BD=BD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=BC=93=E5=AD=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GlobalUsings.cs | 2 ++ .../Swagger/CachingSwaggerProvider.cs | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 aspnet-core/shared/Lion.AbpPro.Shared.Hosting.Microservices/Swagger/CachingSwaggerProvider.cs diff --git a/aspnet-core/shared/Lion.AbpPro.Shared.Hosting.Microservices/GlobalUsings.cs b/aspnet-core/shared/Lion.AbpPro.Shared.Hosting.Microservices/GlobalUsings.cs index a39b1711..5bcfd1d7 100644 --- a/aspnet-core/shared/Lion.AbpPro.Shared.Hosting.Microservices/GlobalUsings.cs +++ b/aspnet-core/shared/Lion.AbpPro.Shared.Hosting.Microservices/GlobalUsings.cs @@ -1,6 +1,7 @@ // Global using directives global using System; +global using System.Collections.Concurrent; global using System.Collections.Generic; global using System.Linq; global using System.Net; @@ -29,6 +30,7 @@ global using Microsoft.OpenApi.Models; global using Serilog; global using Serilog.Exceptions; global using Serilog.Sinks.Elasticsearch; +global using Swashbuckle.AspNetCore.Swagger; global using Swashbuckle.AspNetCore.SwaggerGen; global using Volo.Abp; global using Volo.Abp.AspNetCore.ExceptionHandling; diff --git a/aspnet-core/shared/Lion.AbpPro.Shared.Hosting.Microservices/Swagger/CachingSwaggerProvider.cs b/aspnet-core/shared/Lion.AbpPro.Shared.Hosting.Microservices/Swagger/CachingSwaggerProvider.cs new file mode 100644 index 00000000..cfd40fd5 --- /dev/null +++ b/aspnet-core/shared/Lion.AbpPro.Shared.Hosting.Microservices/Swagger/CachingSwaggerProvider.cs @@ -0,0 +1,26 @@ +namespace Swagger; + +/// +/// swagger注释加载慢,把文档添加到缓存 +/// +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(ISwaggerProvider))] +public class CachingSwaggerProvider : ISwaggerProvider, ITransientDependency +{ + private static readonly ConcurrentDictionary _cache = new ConcurrentDictionary(); + + private readonly SwaggerGenerator _swaggerGenerator; + + public CachingSwaggerProvider( + IOptions optionsAccessor, + IApiDescriptionGroupCollectionProvider apiDescriptionsProvider, + ISchemaGenerator schemaGenerator) + { + _swaggerGenerator = new SwaggerGenerator(optionsAccessor.Value, apiDescriptionsProvider, schemaGenerator); + } + + public OpenApiDocument GetSwagger(string documentName, string host = null, string basePath = null) + { + return _cache.GetOrAdd(documentName, (_) => _swaggerGenerator.GetSwagger(documentName, host, basePath)); + } +} \ No newline at end of file