diff --git a/src/AspNetCoreRateLimit.Redis/AspNetCoreRateLimit.Redis.csproj b/src/AspNetCoreRateLimit.Redis/AspNetCoreRateLimit.Redis.csproj
index 3bc62cbe..fe106e6a 100644
--- a/src/AspNetCoreRateLimit.Redis/AspNetCoreRateLimit.Redis.csproj
+++ b/src/AspNetCoreRateLimit.Redis/AspNetCoreRateLimit.Redis.csproj
@@ -21,7 +21,7 @@
 	
 
 	
-		
+		
 	
 	
 		
@@ -31,7 +31,7 @@
 	
 
 	
-		
+		
 	
 
 	
diff --git a/src/AspNetCoreRateLimit/AspNetCoreRateLimit.csproj b/src/AspNetCoreRateLimit/AspNetCoreRateLimit.csproj
index 937335d3..327a7d6f 100644
--- a/src/AspNetCoreRateLimit/AspNetCoreRateLimit.csproj
+++ b/src/AspNetCoreRateLimit/AspNetCoreRateLimit.csproj
@@ -18,13 +18,15 @@
 		true
 		true
 		embedded
+		IDE0130
+		latest
 	
 
 	
-		
-		
-		
-		
+		
+		
+		
+		
 		
 	
 
@@ -33,7 +35,7 @@
 	
 
 	
-		
+		
 	
 
 	
diff --git a/src/AspNetCoreRateLimit/Core/ClientRateLimitProcessor.cs b/src/AspNetCoreRateLimit/Core/ClientRateLimitProcessor.cs
index 2c8fef3b..669c2625 100644
--- a/src/AspNetCoreRateLimit/Core/ClientRateLimitProcessor.cs
+++ b/src/AspNetCoreRateLimit/Core/ClientRateLimitProcessor.cs
@@ -4,24 +4,15 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class ClientRateLimitProcessor : RateLimitProcessor, IRateLimitProcessor
+    public class ClientRateLimitProcessor(
+            ClientRateLimitOptions options,
+            IClientPolicyStore policyStore,
+            IProcessingStrategy processingStrategy) : RateLimitProcessor(options), IRateLimitProcessor
     {
-        private readonly ClientRateLimitOptions _options;
-        private readonly IProcessingStrategy _processingStrategy;
-        private readonly IRateLimitStore _policyStore;
-        private readonly ICounterKeyBuilder _counterKeyBuilder;
-
-        public ClientRateLimitProcessor(
-                ClientRateLimitOptions options,
-                IClientPolicyStore policyStore,
-                IProcessingStrategy processingStrategy)
-            : base(options)
-        {
-            _options = options;
-            _policyStore = policyStore;
-            _counterKeyBuilder = new ClientCounterKeyBuilder(options);
-            _processingStrategy = processingStrategy;
-        }
+        private readonly ClientRateLimitOptions _options = options;
+        private readonly IProcessingStrategy _processingStrategy = processingStrategy;
+        private readonly IRateLimitStore _policyStore = policyStore;
+        private readonly ICounterKeyBuilder _counterKeyBuilder = new ClientCounterKeyBuilder(options);
 
         public async Task> GetMatchingRulesAsync(ClientRequestIdentity identity, CancellationToken cancellationToken = default)
         {
diff --git a/src/AspNetCoreRateLimit/Core/Extensions.cs b/src/AspNetCoreRateLimit/Core/Extensions.cs
index 2b2be06b..dff29a17 100644
--- a/src/AspNetCoreRateLimit/Core/Extensions.cs
+++ b/src/AspNetCoreRateLimit/Core/Extensions.cs
@@ -27,7 +27,7 @@ public static bool IsRegexMatch(this string source, string value)
             }
             // if the regex is e.g. /api/values/ the path should be an exact match
             // if all paths below this should be included the regex should be /api/values/*
-            if (value[value.Length - 1] != '$')
+            if (value[^1] != '$')
             {
                 value += '$';
             }
@@ -49,7 +49,7 @@ public static string RetryAfterFrom(this DateTime timestamp, RateLimitRule rule)
         public static TimeSpan ToTimeSpan(this string timeSpan)
         {
             var l = timeSpan.Length - 1;
-            var value = timeSpan.Substring(0, l);
+            var value = timeSpan[..l];
             var type = timeSpan.Substring(l, 1);
 
             return type switch
diff --git a/src/AspNetCoreRateLimit/Core/IpRateLimitProcessor.cs b/src/AspNetCoreRateLimit/Core/IpRateLimitProcessor.cs
index 3cf1a0ec..d327a6c8 100644
--- a/src/AspNetCoreRateLimit/Core/IpRateLimitProcessor.cs
+++ b/src/AspNetCoreRateLimit/Core/IpRateLimitProcessor.cs
@@ -5,25 +5,15 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class IpRateLimitProcessor : RateLimitProcessor, IRateLimitProcessor
+    public class IpRateLimitProcessor(
+            IpRateLimitOptions options,
+            IIpPolicyStore policyStore,
+            IProcessingStrategy processingStrategy) : RateLimitProcessor(options), IRateLimitProcessor
     {
-        private readonly IpRateLimitOptions _options;
-        private readonly IRateLimitStore _policyStore;
-        private readonly IProcessingStrategy _processingStrategy;
-        private readonly ICounterKeyBuilder _counterKeyBuilder;
-
-        public IpRateLimitProcessor(
-                IpRateLimitOptions options,
-                IIpPolicyStore policyStore,
-                IProcessingStrategy processingStrategy)
-            : base(options)
-        {
-            _options = options;
-            _policyStore = policyStore;
-            _counterKeyBuilder = new IpCounterKeyBuilder(options);
-            _processingStrategy = processingStrategy;
-        }
-
+        private readonly IpRateLimitOptions _options = options;
+        private readonly IRateLimitStore _policyStore = policyStore;
+        private readonly IProcessingStrategy _processingStrategy = processingStrategy;
+        private readonly ICounterKeyBuilder _counterKeyBuilder = new IpCounterKeyBuilder(options);
 
         public async Task> GetMatchingRulesAsync(ClientRequestIdentity identity, CancellationToken cancellationToken = default)
         {
diff --git a/src/AspNetCoreRateLimit/Core/ProcessingStrategies/AsyncKeyLockProcessingStrategy.cs b/src/AspNetCoreRateLimit/Core/ProcessingStrategies/AsyncKeyLockProcessingStrategy.cs
index 05367a7e..928c9377 100644
--- a/src/AspNetCoreRateLimit/Core/ProcessingStrategies/AsyncKeyLockProcessingStrategy.cs
+++ b/src/AspNetCoreRateLimit/Core/ProcessingStrategies/AsyncKeyLockProcessingStrategy.cs
@@ -5,17 +5,10 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class AsyncKeyLockProcessingStrategy : ProcessingStrategy
+    public class AsyncKeyLockProcessingStrategy(IRateLimitCounterStore counterStore, IRateLimitConfiguration config) : ProcessingStrategy(config)
     {
-        private readonly IRateLimitCounterStore _counterStore;
-        private readonly IRateLimitConfiguration _config;
-
-        public AsyncKeyLockProcessingStrategy(IRateLimitCounterStore counterStore, IRateLimitConfiguration config)
-            : base(config)
-        {
-            _counterStore = counterStore;
-            _config = config;
-        }
+        private readonly IRateLimitCounterStore _counterStore = counterStore;
+        private readonly IRateLimitConfiguration _config = config;
 
         /// The key-lock used for limiting requests.
         private static readonly AsyncKeyedLocker AsyncLock = new(o =>
diff --git a/src/AspNetCoreRateLimit/Core/ProcessingStrategies/ProcessingStrategy.cs b/src/AspNetCoreRateLimit/Core/ProcessingStrategies/ProcessingStrategy.cs
index 41578fe1..bfe067d9 100644
--- a/src/AspNetCoreRateLimit/Core/ProcessingStrategies/ProcessingStrategy.cs
+++ b/src/AspNetCoreRateLimit/Core/ProcessingStrategies/ProcessingStrategy.cs
@@ -6,14 +6,9 @@
 
 namespace AspNetCoreRateLimit
 {
-    public abstract class ProcessingStrategy : IProcessingStrategy
+    public abstract class ProcessingStrategy(IRateLimitConfiguration config) : IProcessingStrategy
     {
-        private readonly IRateLimitConfiguration _config;
-
-        protected ProcessingStrategy(IRateLimitConfiguration config)
-        {
-            _config = config;
-        }
+        private readonly IRateLimitConfiguration _config = config;
 
         public abstract Task ProcessRequestAsync(ClientRequestIdentity requestIdentity, RateLimitRule rule, ICounterKeyBuilder counterKeyBuilder, RateLimitOptions rateLimitOptions, CancellationToken cancellationToken = default);
 
diff --git a/src/AspNetCoreRateLimit/Core/RateLimitProcessor.cs b/src/AspNetCoreRateLimit/Core/RateLimitProcessor.cs
index bb3945b7..410d6175 100644
--- a/src/AspNetCoreRateLimit/Core/RateLimitProcessor.cs
+++ b/src/AspNetCoreRateLimit/Core/RateLimitProcessor.cs
@@ -6,15 +6,9 @@
 
 namespace AspNetCoreRateLimit
 {
-    public abstract class RateLimitProcessor
+    public abstract class RateLimitProcessor(RateLimitOptions options)
     {
-        private readonly RateLimitOptions _options;
-
-        protected RateLimitProcessor(RateLimitOptions options)
-        {
-            _options = options;
-        }
-
+        private readonly RateLimitOptions _options = options;
 
         public virtual bool IsWhitelisted(ClientRequestIdentity requestIdentity)
         {
@@ -143,7 +137,7 @@ protected virtual List GetMatchingRules(ClientRequestIdentity ide
                 }
             }
 
-            limits = limits.OrderBy(l => l.PeriodTimespan).ToList();
+            limits = [.. limits.OrderBy(l => l.PeriodTimespan)];
 
             if (_options.StackBlockedRequests)
             {
diff --git a/src/AspNetCoreRateLimit/CounterKeyBuilders/ClientCounterKeyBuilder.cs b/src/AspNetCoreRateLimit/CounterKeyBuilders/ClientCounterKeyBuilder.cs
index 32aca93f..78dd78e5 100644
--- a/src/AspNetCoreRateLimit/CounterKeyBuilders/ClientCounterKeyBuilder.cs
+++ b/src/AspNetCoreRateLimit/CounterKeyBuilders/ClientCounterKeyBuilder.cs
@@ -1,13 +1,8 @@
 namespace AspNetCoreRateLimit
 {
-    public class ClientCounterKeyBuilder : ICounterKeyBuilder
+    public class ClientCounterKeyBuilder(ClientRateLimitOptions options) : ICounterKeyBuilder
     {
-        private readonly ClientRateLimitOptions _options;
-
-        public ClientCounterKeyBuilder(ClientRateLimitOptions options)
-        {
-            _options = options;
-        }
+        private readonly ClientRateLimitOptions _options = options;
 
         public string Build(ClientRequestIdentity requestIdentity, RateLimitRule rule)
         {
diff --git a/src/AspNetCoreRateLimit/CounterKeyBuilders/IpCounterKeyBuilder.cs b/src/AspNetCoreRateLimit/CounterKeyBuilders/IpCounterKeyBuilder.cs
index 6c610d06..f949313d 100644
--- a/src/AspNetCoreRateLimit/CounterKeyBuilders/IpCounterKeyBuilder.cs
+++ b/src/AspNetCoreRateLimit/CounterKeyBuilders/IpCounterKeyBuilder.cs
@@ -1,13 +1,8 @@
 namespace AspNetCoreRateLimit
 {
-    public class IpCounterKeyBuilder : ICounterKeyBuilder
+    public class IpCounterKeyBuilder(IpRateLimitOptions options) : ICounterKeyBuilder
     {
-        private readonly IpRateLimitOptions _options;
-
-        public IpCounterKeyBuilder(IpRateLimitOptions options)
-        {
-            _options = options;
-        }
+        private readonly IpRateLimitOptions _options = options;
 
         public string Build(ClientRequestIdentity requestIdentity, RateLimitRule rule)
         {
diff --git a/src/AspNetCoreRateLimit/Middleware/ClientRateLimitMiddleware.cs b/src/AspNetCoreRateLimit/Middleware/ClientRateLimitMiddleware.cs
index 5cb06e09..5cccdf62 100644
--- a/src/AspNetCoreRateLimit/Middleware/ClientRateLimitMiddleware.cs
+++ b/src/AspNetCoreRateLimit/Middleware/ClientRateLimitMiddleware.cs
@@ -4,20 +4,14 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class ClientRateLimitMiddleware : RateLimitMiddleware
+    public class ClientRateLimitMiddleware(RequestDelegate next,
+        IProcessingStrategy processingStrategy,
+        IOptions options,
+        IClientPolicyStore policyStore,
+        IRateLimitConfiguration config,
+        ILogger logger) : RateLimitMiddleware(next, options?.Value, new ClientRateLimitProcessor(options?.Value, policyStore, processingStrategy), config)
     {
-        private readonly ILogger _logger;
-
-        public ClientRateLimitMiddleware(RequestDelegate next,
-            IProcessingStrategy processingStrategy,
-            IOptions options,
-            IClientPolicyStore policyStore,
-            IRateLimitConfiguration config,
-            ILogger logger)
-        : base(next, options?.Value, new ClientRateLimitProcessor(options?.Value, policyStore, processingStrategy), config)
-        {
-            _logger = logger;
-        }
+        private readonly ILogger _logger = logger;
 
         protected override void LogBlockedRequest(HttpContext httpContext, ClientRequestIdentity identity, RateLimitCounter counter, RateLimitRule rule)
         {
diff --git a/src/AspNetCoreRateLimit/Middleware/IpRateLimitMiddleware.cs b/src/AspNetCoreRateLimit/Middleware/IpRateLimitMiddleware.cs
index 71834d6c..4faa34bf 100644
--- a/src/AspNetCoreRateLimit/Middleware/IpRateLimitMiddleware.cs
+++ b/src/AspNetCoreRateLimit/Middleware/IpRateLimitMiddleware.cs
@@ -4,21 +4,15 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class IpRateLimitMiddleware : RateLimitMiddleware
+    public class IpRateLimitMiddleware(RequestDelegate next,
+        IProcessingStrategy processingStrategy,
+        IOptions options,
+        IIpPolicyStore policyStore,
+        IRateLimitConfiguration config,
+        ILogger logger
+        ) : RateLimitMiddleware(next, options?.Value, new IpRateLimitProcessor(options?.Value, policyStore, processingStrategy), config)
     {
-        private readonly ILogger _logger;
-
-        public IpRateLimitMiddleware(RequestDelegate next,
-            IProcessingStrategy processingStrategy,
-            IOptions options,
-            IIpPolicyStore policyStore,
-            IRateLimitConfiguration config,
-            ILogger logger
-        )
-            : base(next, options?.Value, new IpRateLimitProcessor(options?.Value, policyStore, processingStrategy), config)
-        {
-            _logger = logger;
-        }
+        private readonly ILogger _logger = logger;
 
         protected override void LogBlockedRequest(HttpContext httpContext, ClientRequestIdentity identity, RateLimitCounter counter, RateLimitRule rule)
         {
diff --git a/src/AspNetCoreRateLimit/Middleware/RateLimitConfiguration.cs b/src/AspNetCoreRateLimit/Middleware/RateLimitConfiguration.cs
index 6a7fe241..07487220 100644
--- a/src/AspNetCoreRateLimit/Middleware/RateLimitConfiguration.cs
+++ b/src/AspNetCoreRateLimit/Middleware/RateLimitConfiguration.cs
@@ -4,25 +4,19 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class RateLimitConfiguration : IRateLimitConfiguration
+    public class RateLimitConfiguration(
+        IOptions ipOptions,
+        IOptions clientOptions) : IRateLimitConfiguration
     {
-        public IList ClientResolvers { get; } = new List();
-        public IList IpResolvers { get; } = new List();
+        public IList ClientResolvers { get; } = [];
+        public IList IpResolvers { get; } = [];
 
         public virtual ICounterKeyBuilder EndpointCounterKeyBuilder { get; } = new PathCounterKeyBuilder();
 
         public virtual Func RateIncrementer { get; } = () => 1;
 
-        public RateLimitConfiguration(
-            IOptions ipOptions,
-            IOptions clientOptions)
-        {
-            IpRateLimitOptions = ipOptions?.Value;
-            ClientRateLimitOptions = clientOptions?.Value;
-        }
-
-        protected readonly IpRateLimitOptions IpRateLimitOptions;
-        protected readonly ClientRateLimitOptions ClientRateLimitOptions;
+        protected readonly IpRateLimitOptions IpRateLimitOptions = ipOptions?.Value;
+        protected readonly ClientRateLimitOptions ClientRateLimitOptions = clientOptions?.Value;
 
         public virtual void RegisterResolvers()
         {
diff --git a/src/AspNetCoreRateLimit/Models/IpRateLimitPolicies.cs b/src/AspNetCoreRateLimit/Models/IpRateLimitPolicies.cs
index 20ad6713..3c787137 100644
--- a/src/AspNetCoreRateLimit/Models/IpRateLimitPolicies.cs
+++ b/src/AspNetCoreRateLimit/Models/IpRateLimitPolicies.cs
@@ -4,6 +4,6 @@ namespace AspNetCoreRateLimit
 {
     public class IpRateLimitPolicies
     {
-        public List IpRules { get; set; } = new List();
+        public List IpRules { get; set; } = [];
     }
 }
\ No newline at end of file
diff --git a/src/AspNetCoreRateLimit/Models/RateLimitPolicy.cs b/src/AspNetCoreRateLimit/Models/RateLimitPolicy.cs
index 7403efdc..6621dd3f 100644
--- a/src/AspNetCoreRateLimit/Models/RateLimitPolicy.cs
+++ b/src/AspNetCoreRateLimit/Models/RateLimitPolicy.cs
@@ -4,6 +4,6 @@ namespace AspNetCoreRateLimit
 {
     public class RateLimitPolicy
     {
-        public List Rules { get; set; } = new List();
+        public List Rules { get; set; } = [];
     }
 }
diff --git a/src/AspNetCoreRateLimit/Properties/AssemblyInfo.cs b/src/AspNetCoreRateLimit/Properties/AssemblyInfo.cs
index fcaeb398..ba3ad450 100644
--- a/src/AspNetCoreRateLimit/Properties/AssemblyInfo.cs
+++ b/src/AspNetCoreRateLimit/Properties/AssemblyInfo.cs
@@ -1,5 +1,4 @@
 using System.Reflection;
-using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 
 // General Information about an assembly is controlled through the following
diff --git a/src/AspNetCoreRateLimit/Resolvers/ClientHeaderResolveContributor.cs b/src/AspNetCoreRateLimit/Resolvers/ClientHeaderResolveContributor.cs
index 479f5627..0626e0a2 100644
--- a/src/AspNetCoreRateLimit/Resolvers/ClientHeaderResolveContributor.cs
+++ b/src/AspNetCoreRateLimit/Resolvers/ClientHeaderResolveContributor.cs
@@ -4,14 +4,10 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class ClientHeaderResolveContributor : IClientResolveContributor
+    public class ClientHeaderResolveContributor(string headerName) : IClientResolveContributor
     {
-        private readonly string _headerName;
+        private readonly string _headerName = headerName;
 
-        public ClientHeaderResolveContributor(string headerName)
-        {
-            _headerName = headerName;
-        }
         public Task ResolveClientAsync(HttpContext httpContext)
         {
             string clientId = null;
diff --git a/src/AspNetCoreRateLimit/Resolvers/IpConnectionResolveContributor.cs b/src/AspNetCoreRateLimit/Resolvers/IpConnectionResolveContributor.cs
index 2fa25820..b3249ce9 100644
--- a/src/AspNetCoreRateLimit/Resolvers/IpConnectionResolveContributor.cs
+++ b/src/AspNetCoreRateLimit/Resolvers/IpConnectionResolveContributor.cs
@@ -4,12 +4,6 @@ namespace AspNetCoreRateLimit
 {
     public class IpConnectionResolveContributor : IIpResolveContributor
     {
-
-        public IpConnectionResolveContributor()
-        {
-
-        }
-
         public string ResolveIp(HttpContext httpContext)
         {
             return httpContext.Connection.RemoteIpAddress?.ToString();
diff --git a/src/AspNetCoreRateLimit/Resolvers/IpHeaderResolveContributor.cs b/src/AspNetCoreRateLimit/Resolvers/IpHeaderResolveContributor.cs
index 72842fcb..a599fea7 100644
--- a/src/AspNetCoreRateLimit/Resolvers/IpHeaderResolveContributor.cs
+++ b/src/AspNetCoreRateLimit/Resolvers/IpHeaderResolveContributor.cs
@@ -4,15 +4,10 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class IpHeaderResolveContributor : IIpResolveContributor
+    public class IpHeaderResolveContributor(
+        string headerName) : IIpResolveContributor
     {
-        private readonly string _headerName;
-
-        public IpHeaderResolveContributor(
-            string headerName)
-        {
-            _headerName = headerName;
-        }
+        private readonly string _headerName = headerName;
 
         public string ResolveIp(HttpContext httpContext)
         {
diff --git a/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheClientPolicyStore.cs b/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheClientPolicyStore.cs
index f8ff4790..bfede6f2 100644
--- a/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheClientPolicyStore.cs
+++ b/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheClientPolicyStore.cs
@@ -4,19 +4,13 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class DistributedCacheClientPolicyStore : DistributedCacheRateLimitStore, IClientPolicyStore
+    public class DistributedCacheClientPolicyStore(
+        IDistributedCache cache,
+        IOptions options = null,
+        IOptions policies = null) : DistributedCacheRateLimitStore(cache), IClientPolicyStore
     {
-        private readonly ClientRateLimitOptions _options;
-        private readonly ClientRateLimitPolicies _policies;
-
-        public DistributedCacheClientPolicyStore(
-            IDistributedCache cache,
-            IOptions options = null,
-            IOptions policies = null) : base(cache)
-        {
-            _options = options?.Value;
-            _policies = policies?.Value;
-        }
+        private readonly ClientRateLimitOptions _options = options?.Value;
+        private readonly ClientRateLimitPolicies _policies = policies?.Value;
 
         public async Task SeedAsync()
         {
diff --git a/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheIpPolicyStore.cs b/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheIpPolicyStore.cs
index 565a7d72..32c734f9 100644
--- a/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheIpPolicyStore.cs
+++ b/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheIpPolicyStore.cs
@@ -4,19 +4,13 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class DistributedCacheIpPolicyStore : DistributedCacheRateLimitStore, IIpPolicyStore
+    public class DistributedCacheIpPolicyStore(
+        IDistributedCache cache,
+        IOptions options = null,
+        IOptions policies = null) : DistributedCacheRateLimitStore(cache), IIpPolicyStore
     {
-        private readonly IpRateLimitOptions _options;
-        private readonly IpRateLimitPolicies _policies;
-
-        public DistributedCacheIpPolicyStore(
-            IDistributedCache cache,
-            IOptions options = null,
-            IOptions policies = null) : base(cache)
-        {
-            _options = options?.Value;
-            _policies = policies?.Value;
-        }
+        private readonly IpRateLimitOptions _options = options?.Value;
+        private readonly IpRateLimitPolicies _policies = policies?.Value;
 
         public async Task SeedAsync()
         {
diff --git a/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheRateLimitCounterStore.cs b/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheRateLimitCounterStore.cs
index abe82410..d11368c1 100644
--- a/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheRateLimitCounterStore.cs
+++ b/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheRateLimitCounterStore.cs
@@ -2,10 +2,7 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class DistributedCacheRateLimitCounterStore : DistributedCacheRateLimitStore, IRateLimitCounterStore
+    public class DistributedCacheRateLimitCounterStore(IDistributedCache cache) : DistributedCacheRateLimitStore(cache), IRateLimitCounterStore
     {
-        public DistributedCacheRateLimitCounterStore(IDistributedCache cache) : base(cache)
-        {
-        }
     }
 }
\ No newline at end of file
diff --git a/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheRateLimitStore.cs b/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheRateLimitStore.cs
index c2f5d005..9d5f3e99 100644
--- a/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheRateLimitStore.cs
+++ b/src/AspNetCoreRateLimit/Store/DistributedCache/DistributedCacheRateLimitStore.cs
@@ -6,14 +6,9 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class DistributedCacheRateLimitStore : IRateLimitStore
+    public class DistributedCacheRateLimitStore(IDistributedCache cache) : IRateLimitStore
     {
-        private readonly IDistributedCache _cache;
-
-        public DistributedCacheRateLimitStore(IDistributedCache cache)
-        {
-            _cache = cache;
-        }
+        private readonly IDistributedCache _cache = cache;
 
         public Task SetAsync(string id, T entry, TimeSpan? expirationTime = null, CancellationToken cancellationToken = default)
         {
diff --git a/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheClientPolicyStore.cs b/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheClientPolicyStore.cs
index 37f87284..14d09c4d 100644
--- a/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheClientPolicyStore.cs
+++ b/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheClientPolicyStore.cs
@@ -4,19 +4,13 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class MemoryCacheClientPolicyStore : MemoryCacheRateLimitStore, IClientPolicyStore
+    public class MemoryCacheClientPolicyStore(
+        IMemoryCache cache,
+        IOptions options = null,
+        IOptions policies = null) : MemoryCacheRateLimitStore(cache), IClientPolicyStore
     {
-        private readonly ClientRateLimitOptions _options;
-        private readonly ClientRateLimitPolicies _policies;
-
-        public MemoryCacheClientPolicyStore(
-            IMemoryCache cache,
-            IOptions options = null,
-            IOptions policies = null) : base(cache)
-        {
-            _options = options?.Value;
-            _policies = policies?.Value;
-        }
+        private readonly ClientRateLimitOptions _options = options?.Value;
+        private readonly ClientRateLimitPolicies _policies = policies?.Value;
 
         public async Task SeedAsync()
         {
diff --git a/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheIpPolicyStore.cs b/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheIpPolicyStore.cs
index 69972f62..67711fdf 100644
--- a/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheIpPolicyStore.cs
+++ b/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheIpPolicyStore.cs
@@ -4,19 +4,13 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class MemoryCacheIpPolicyStore : MemoryCacheRateLimitStore, IIpPolicyStore
+    public class MemoryCacheIpPolicyStore(
+        IMemoryCache cache,
+        IOptions options = null,
+        IOptions policies = null) : MemoryCacheRateLimitStore(cache), IIpPolicyStore
     {
-        private readonly IpRateLimitOptions _options;
-        private readonly IpRateLimitPolicies _policies;
-
-        public MemoryCacheIpPolicyStore(
-            IMemoryCache cache,
-            IOptions options = null,
-            IOptions policies = null) : base(cache)
-        {
-            _options = options?.Value;
-            _policies = policies?.Value;
-        }
+        private readonly IpRateLimitOptions _options = options?.Value;
+        private readonly IpRateLimitPolicies _policies = policies?.Value;
 
         public async Task SeedAsync()
         {
diff --git a/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheRateLimitCounterStore.cs b/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheRateLimitCounterStore.cs
index 8f8faa63..5633b41a 100644
--- a/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheRateLimitCounterStore.cs
+++ b/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheRateLimitCounterStore.cs
@@ -2,10 +2,7 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class MemoryCacheRateLimitCounterStore : MemoryCacheRateLimitStore, IRateLimitCounterStore
+    public class MemoryCacheRateLimitCounterStore(IMemoryCache cache) : MemoryCacheRateLimitStore(cache), IRateLimitCounterStore
     {
-        public MemoryCacheRateLimitCounterStore(IMemoryCache cache) : base(cache)
-        {
-        }
     }
 }
\ No newline at end of file
diff --git a/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheRateLimitStore.cs b/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheRateLimitStore.cs
index 46e3ed5c..db3b8031 100644
--- a/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheRateLimitStore.cs
+++ b/src/AspNetCoreRateLimit/Store/MemoryCache/MemoryCacheRateLimitStore.cs
@@ -5,14 +5,9 @@
 
 namespace AspNetCoreRateLimit
 {
-    public class MemoryCacheRateLimitStore : IRateLimitStore
+    public class MemoryCacheRateLimitStore(IMemoryCache cache) : IRateLimitStore
     {
-        private readonly IMemoryCache _cache;
-
-        public MemoryCacheRateLimitStore(IMemoryCache cache)
-        {
-            _cache = cache;
-        }
+        private readonly IMemoryCache _cache = cache;
 
         public Task ExistsAsync(string id, CancellationToken cancellationToken = default)
         {
diff --git a/test/AspNetCoreRateLimit.Demo/Controllers/IpRateLimitController.cs b/test/AspNetCoreRateLimit.Demo/Controllers/IpRateLimitController.cs
index 36f533c6..02f81844 100644
--- a/test/AspNetCoreRateLimit.Demo/Controllers/IpRateLimitController.cs
+++ b/test/AspNetCoreRateLimit.Demo/Controllers/IpRateLimitController.cs
@@ -32,7 +32,7 @@ public async Task Post()
             {
                 Ip = "8.8.4.4",
                 Rules = new List(new RateLimitRule[] {
-                    new RateLimitRule {
+                    new() {
                         Endpoint = "*:/api/testupdate",
                         Limit = 100,
                         Period = "1d" }
diff --git a/test/AspNetCoreRateLimit.Tests/AspNetCoreRateLimit.Tests.csproj b/test/AspNetCoreRateLimit.Tests/AspNetCoreRateLimit.Tests.csproj
index 2b34ee2d..d3a76e9d 100644
--- a/test/AspNetCoreRateLimit.Tests/AspNetCoreRateLimit.Tests.csproj
+++ b/test/AspNetCoreRateLimit.Tests/AspNetCoreRateLimit.Tests.csproj
@@ -14,9 +14,9 @@
 
   
     
-    
-    
-    
+    
+    
+    
       all
       runtime; build; native; contentfiles; analyzers; buildtransitive