diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj
index f6957cfe17..7e4476f2f8 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj
@@ -12,6 +12,7 @@
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonApplicationContractsModule.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonApplicationContractsModule.cs
index e675de2267..66bbfa8b39 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonApplicationContractsModule.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonApplicationContractsModule.cs
@@ -1,5 +1,6 @@
using Volo.Abp.Application;
using Volo.Abp.Authorization;
+using Volo.Abp.Caching;
using Volo.Abp.Modularity;
namespace Volo.CmsKit;
@@ -7,7 +8,8 @@ namespace Volo.CmsKit;
[DependsOn(
typeof(CmsKitDomainSharedModule),
typeof(AbpDddApplicationContractsModule),
- typeof(AbpAuthorizationModule)
+ typeof(AbpAuthorizationModule),
+ typeof(AbpCachingModule)
)]
public class CmsKitCommonApplicationContractsModule : AbpModule
{
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs
new file mode 100644
index 0000000000..1e9503006c
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs
@@ -0,0 +1,33 @@
+using System.Threading.Tasks;
+using Volo.Abp.Caching;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Entities.Events;
+using Volo.Abp.EventBus;
+using Volo.Abp.ObjectMapping;
+using Volo.CmsKit.GlobalResources;
+using Volo.CmsKit.Public.GlobalResources;
+
+namespace Volo.CmsKit.Public.GlobalResources.Handlers;
+
+public class GlobalResourceEventHandler:
+ ILocalEventHandler>,
+ ITransientDependency
+{
+ public IObjectMapper ObjectMapper { get; }
+ private readonly IDistributedCache _resourceCache;
+
+ public GlobalResourceEventHandler(
+ IDistributedCache resourceCache,
+ IObjectMapper objectMapper)
+ {
+ ObjectMapper = objectMapper;
+ _resourceCache = resourceCache;
+ }
+
+ public async Task HandleEventAsync(EntityUpdatedEventData eventData)
+ {
+ await _resourceCache.SetAsync(
+ eventData.Entity.Name,
+ ObjectMapper.Map(eventData.Entity));
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs
index 2c561f3474..88b01c8ae9 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs
@@ -98,7 +98,7 @@ public class CmsKitPublicWebModule : AbpModule
typeof(GlobalStyleViewComponent)
);
options.Add(
- LayoutHooks.Head.Last,
+ LayoutHooks.Body.Last,
typeof(GlobalScriptViewComponent)
);
});
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs
index 4abe1d48d3..520df2a389 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs
@@ -1,7 +1,11 @@
-using System.Text;
+using System;
+using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Distributed;
using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Caching;
+using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.Public.GlobalResources;
namespace Volo.CmsKit.Public.Web.Controllers;
@@ -10,31 +14,49 @@ namespace Volo.CmsKit.Public.Web.Controllers;
public class CmsKitPublicGlobalResourcesController: AbpController
{
private readonly IGlobalResourcePublicAppService _globalResourcePublicAppService;
+ private readonly IDistributedCache _resourceCache;
- public CmsKitPublicGlobalResourcesController(IGlobalResourcePublicAppService globalResourcePublicAppService)
+ public CmsKitPublicGlobalResourcesController(
+ IGlobalResourcePublicAppService globalResourcePublicAppService,
+ IDistributedCache resourceCache)
{
_globalResourcePublicAppService = globalResourcePublicAppService;
+ _resourceCache = resourceCache;
}
[HttpGet]
[Route("style")]
- public async Task GetGlobalStyleAsync(string entityType, string entityId)
+ public async Task GetGlobalStyleAsync()
{
- var style = await _globalResourcePublicAppService.GetGlobalStyleAsync();
+ var style = await _resourceCache.GetOrAddAsync(
+ GlobalResourceConsts.GlobalStyleName, //Cache key
+ async () => await _globalResourcePublicAppService.GetGlobalStyleAsync(),
+ () => new DistributedCacheEntryOptions
+ {
+ AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(2)
+ }
+ );
- var contents = Encoding.ASCII.GetBytes(style.Value);
-
- return new FileContentResult(contents, "text/css");
+ return new FileContentResult(
+ Encoding.ASCII.GetBytes(style.Value),
+ "text/css");
}
[HttpGet]
[Route("script")]
- public async Task GetGlobalScriptAsync(string entityType, string entityId)
+ public async Task GetGlobalScriptAsync()
{
- var script = await _globalResourcePublicAppService.GetGlobalScriptAsync();
-
- var contents = Encoding.ASCII.GetBytes(script.Value);
+ var script = await _resourceCache.GetOrAddAsync(
+ GlobalResourceConsts.GlobalScriptName, //Cache key
+ async () => await _globalResourcePublicAppService.GetGlobalScriptAsync(),
+ () => new DistributedCacheEntryOptions
+ {
+ AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(2)
+ }
+ );
- return new FileContentResult(contents, "application/javascript");
+ return new FileContentResult(
+ Encoding.ASCII.GetBytes(script.Value),
+ "application/javascript");
}
}
\ No newline at end of file