diff --git a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs index b8b897068f..c897a20e3a 100644 --- a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs +++ b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs @@ -63,7 +63,10 @@ namespace Volo.Abp.Caching return ObjectSerializer.Deserialize(cachedBytes); } - public TCacheItem GetOrAdd(string key, Func factory) + public TCacheItem GetOrAdd( + string key, + Func factory, + Func optionsFactory = null) { var value = Get(key); if (value != null) @@ -80,14 +83,17 @@ namespace Volo.Abp.Caching } value = factory(); - Set(key, value); - + Set(key, value, optionsFactory?.Invoke()); } return value; } - public async Task GetOrAddAsync(string key, Func> factory, CancellationToken token = default) + public async Task GetOrAddAsync( + string key, + Func> factory, + Func optionsFactory = null, + CancellationToken token = default) { var value = await GetAsync(key, token); if (value != null) @@ -104,7 +110,7 @@ namespace Volo.Abp.Caching } value = await factory(); - await SetAsync(key, value, token: token); + await SetAsync(key, value, optionsFactory?.Invoke(), token); } return value; diff --git a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/IDistributedCache.cs b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/IDistributedCache.cs index 5fd6d2d84f..1e21d3a3a6 100644 --- a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/IDistributedCache.cs +++ b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/IDistributedCache.cs @@ -20,12 +20,14 @@ namespace Volo.Abp.Caching TCacheItem GetOrAdd( string key, - Func factory + Func factory, + Func optionsFactory = null ); Task GetOrAddAsync( [NotNull] string key, Func> factory, + Func optionsFactory = null, CancellationToken token = default );