diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Caching/EntityCacheServiceCollectionExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Caching/EntityCacheServiceCollectionExtensions.cs index 81d2993c4f..c35406b45b 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Caching/EntityCacheServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Caching/EntityCacheServiceCollectionExtensions.cs @@ -20,7 +20,7 @@ public static class EntityCacheServiceCollectionExtensions services.Configure(options => { - options.ConfigureCache(cacheOptions ?? GetDefaultCacheOptions()); + options.ConfigureCache>(cacheOptions ?? GetDefaultCacheOptions()); }); services.Configure(options => @@ -42,7 +42,7 @@ public static class EntityCacheServiceCollectionExtensions services.Configure(options => { - options.ConfigureCache(cacheOptions ?? GetDefaultCacheOptions()); + options.ConfigureCache>(cacheOptions ?? GetDefaultCacheOptions()); }); return services; @@ -59,7 +59,7 @@ public static class EntityCacheServiceCollectionExtensions services.Configure(options => { - options.ConfigureCache(cacheOptions ?? GetDefaultCacheOptions()); + options.ConfigureCache>(cacheOptions ?? GetDefaultCacheOptions()); }); return services; diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestAppModule.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestAppModule.cs index f30774838e..1be226febb 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestAppModule.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestAppModule.cs @@ -30,8 +30,14 @@ public class TestAppModule : AbpModule context.Services.AddHttpContextAccessor(); context.Services.Replace(ServiceDescriptor.Singleton()); - context.Services.AddEntityCache(); - context.Services.AddEntityCache(); + context.Services.AddEntityCache(new DistributedCacheEntryOptions + { + AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(7) + }); + context.Services.AddEntityCache(new DistributedCacheEntryOptions + { + AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(9) + }); } public override void OnApplicationInitialization(ApplicationInitializationContext context) diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityCache_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityCache_Tests.cs index 5e321736d4..347d244567 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityCache_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityCache_Tests.cs @@ -1,5 +1,9 @@ using System; +using System.Reflection; using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Shouldly; using Volo.Abp.Caching; using Volo.Abp.Domain.Entities; @@ -116,6 +120,51 @@ public abstract class EntityCache_Tests : TestAppTestBase, Guid>>(); + var productCacheItemCache = GetRequiredService, Guid>>(); + + var productOptions = GetDefaultCachingOptions(productCache); + productOptions.AbsoluteExpirationRelativeToNow.ShouldBe(TimeSpan.FromMinutes(7)); + productOptions.SlidingExpiration.ShouldBeNull(); + + var productCacheItemOptions = GetDefaultCachingOptions(productCacheItemCache); + productCacheItemOptions.AbsoluteExpirationRelativeToNow.ShouldBe(TimeSpan.FromMinutes(9)); + productCacheItemOptions.SlidingExpiration.ShouldBeNull(); + } + + [Fact] + public void EntityCache_Configured_Options_Should_Be_Applied() + { + // This test verifies that the cache options configured during AddEntityCache are properly applied + // The options are configured in TestAppModule.ConfigureServices + var productCache = GetRequiredService, Guid>>(); + var productCacheItemCache = GetRequiredService, Guid>>(); + + GetDefaultCachingOptions(productCache).AbsoluteExpirationRelativeToNow.ShouldBe(TimeSpan.FromMinutes(7)); + GetDefaultCachingOptions(productCacheItemCache).AbsoluteExpirationRelativeToNow.ShouldBe(TimeSpan.FromMinutes(9)); + } + + private static DistributedCacheEntryOptions GetDefaultCachingOptions(object instance) + { + var internalCacheProperty = instance + .GetType() + .GetProperty("InternalCache", BindingFlags.Instance | BindingFlags.Public); + + if (internalCacheProperty != null) + { + instance = internalCacheProperty.GetValue(instance); + } + + var defaultOptionsField = instance + .GetType() + .GetField("DefaultCacheOptions", BindingFlags.Instance | BindingFlags.NonPublic); + + return (DistributedCacheEntryOptions)defaultOptionsField.GetValue(instance); + } } [Serializable]