From 486cdb9182b2e781093f8d739f0b4053e020e8c0 Mon Sep 17 00:00:00 2001 From: Joshua Zillwood Date: Mon, 8 Jun 2026 20:42:15 -0500 Subject: [PATCH] docs: add xml documentation to all public apis across src --- src/AzureCosmos/AzureCosmosActionCacheFactory.cs | 2 +- src/AzureCosmos/AzureCosmosCacheOptions.cs | 5 +---- src/AzureCosmos/AzureCosmosEntry.cs | 12 ++++++------ .../AzureCosmosContainerNotFoundOrCreated.cs | 6 +++--- .../AzureCosmosDatabaseNotFoundOrCreated.cs | 6 +++--- src/Common/Caching/ActionCacheFactoryBase.cs | 6 +++--- src/Common/Caching/ActionCacheOptionsBuilder.cs | 2 +- src/Common/Caching/ActionCacheRefreshProvider.cs | 2 +- src/Common/Concurrency/CacheLockerBase.cs | 10 ++-------- .../Concurrency/Interfaces/ICacheLockerHandler.cs | 10 ++-------- src/Common/Concurrency/Locks/CacheLock.cs | 4 ++-- src/Common/Concurrency/Locks/NullCacheLock.cs | 3 +-- src/Common/Concurrency/NullCacheLocker.cs | 12 ++++-------- .../ActionCacheEndpointEvictionFilterFactory.cs | 2 +- .../ActionCacheEndpointFilterAbstractFactory.cs | 12 ++++++------ .../ActionCacheEndpointFilterFactoryBase.cs | 12 ++++++------ .../Filters/ActionCacheFilterAbstractFactory.cs | 12 ++++++------ src/Common/Filters/ActionCacheFilterFactoryBase.cs | 12 ++++++------ src/Common/Keys/ActionCacheKeyComponents.cs | 14 ++++++-------- src/Common/Utilities/Namespace.cs | 12 ++++++------ .../ExpirationTokens/ExpirationTokenSources.cs | 6 +++--- .../ExpirationTokenSourcesFallback.cs | 2 +- .../Interfaces/IExpirationTokenSources.cs | 10 +++++----- src/Redis/RedisActionCacheFactory.cs | 6 +++--- src/SqlServer/SqlServerActionCache.cs | 7 ++----- 25 files changed, 81 insertions(+), 106 deletions(-) diff --git a/src/AzureCosmos/AzureCosmosActionCacheFactory.cs b/src/AzureCosmos/AzureCosmosActionCacheFactory.cs index 58e79d0..7e83faf 100644 --- a/src/AzureCosmos/AzureCosmosActionCacheFactory.cs +++ b/src/AzureCosmos/AzureCosmosActionCacheFactory.cs @@ -14,7 +14,7 @@ namespace ActionCache.AzureCosmos; public class AzureCosmosActionCacheFactory : ActionCacheFactoryBase { /// - /// An Azure Cosmos Db client implementation. + /// The Azure Cosmos DB container used as the backing store for created cache instances. /// protected readonly Container Cache; diff --git a/src/AzureCosmos/AzureCosmosCacheOptions.cs b/src/AzureCosmos/AzureCosmosCacheOptions.cs index d059d27..d611c97 100644 --- a/src/AzureCosmos/AzureCosmosCacheOptions.cs +++ b/src/AzureCosmos/AzureCosmosCacheOptions.cs @@ -8,11 +8,8 @@ namespace ActionCache.AzureCosmos; public class AzureCosmosCacheOptions { /// - /// Gets or sets the connection string for the Azure Cosmos cache. + /// Gets or sets the connection string used to connect to the Azure Cosmos DB account. /// - /// - /// The is required to establish a connection to the Cosmos database. - /// public string? ConnectionString { get; set; } /// diff --git a/src/AzureCosmos/AzureCosmosEntry.cs b/src/AzureCosmos/AzureCosmosEntry.cs index d8ffc09..b5eed07 100644 --- a/src/AzureCosmos/AzureCosmosEntry.cs +++ b/src/AzureCosmos/AzureCosmosEntry.cs @@ -37,23 +37,23 @@ public class AzureCosmosEntry public required string Value { get; set; } /// - /// Gets or sets the absolute expiration associated with the entry. + /// Gets or sets the absolute expiration of the entry as a Unix timestamp in milliseconds. /// [JsonPropertyName("absoluteExpiration")] - [JsonProperty(PropertyName = "absoluteExpiration")] + [JsonProperty(PropertyName = "absoluteExpiration")] public long AbsoluteExpiration { get; set; } /// - /// Gets or sets the sliding expiration associated with the entry. + /// Gets or sets the sliding expiration of the entry in milliseconds. /// [JsonPropertyName("slidingExpiration")] - [JsonProperty(PropertyName = "slidingExpiration")] + [JsonProperty(PropertyName = "slidingExpiration")] public long SlidingExpiration { get; set; } /// - /// Gets or sets the TTL associated with the entry. + /// Gets or sets the Cosmos DB TTL for the entry in seconds; -1 disables TTL-based expiration. /// [JsonPropertyName("ttl")] - [JsonProperty(PropertyName = "ttl")] + [JsonProperty(PropertyName = "ttl")] public long TTL { get; set; } } \ No newline at end of file diff --git a/src/AzureCosmos/Exceptions/AzureCosmosContainerNotFoundOrCreated.cs b/src/AzureCosmos/Exceptions/AzureCosmosContainerNotFoundOrCreated.cs index 4b2ccb1..717a487 100644 --- a/src/AzureCosmos/Exceptions/AzureCosmosContainerNotFoundOrCreated.cs +++ b/src/AzureCosmos/Exceptions/AzureCosmosContainerNotFoundOrCreated.cs @@ -9,10 +9,10 @@ namespace ActionCache.AzureCosmos.Exceptions; public class AzureCosmosContainerNotFoundOrCreated : Exception { /// - /// Initializes a new instance of the class - /// with the default error message. + /// Initializes a new instance of the class with an error message containing the HTTP status code from . /// - public AzureCosmosContainerNotFoundOrCreated(ContainerResponse response) + /// The Cosmos DB container response whose status code is included in the exception message. + public AzureCosmosContainerNotFoundOrCreated(ContainerResponse response) : base($"An error occurred fetching or creating Azure Cosmos container ({response.StatusCode}).") { } diff --git a/src/AzureCosmos/Exceptions/AzureCosmosDatabaseNotFoundOrCreated.cs b/src/AzureCosmos/Exceptions/AzureCosmosDatabaseNotFoundOrCreated.cs index 7aadf12..7e31f17 100644 --- a/src/AzureCosmos/Exceptions/AzureCosmosDatabaseNotFoundOrCreated.cs +++ b/src/AzureCosmos/Exceptions/AzureCosmosDatabaseNotFoundOrCreated.cs @@ -9,10 +9,10 @@ namespace ActionCache.AzureCosmos.Exceptions; public class AzureCosmosDatabaseNotFoundOrCreated : Exception { /// - /// Initializes a new instance of the class - /// with the default error message. + /// Initializes a new instance of the class with an error message containing the HTTP status code from . /// - public AzureCosmosDatabaseNotFoundOrCreated(DatabaseResponse response) + /// The Cosmos DB database response whose status code is included in the exception message. + public AzureCosmosDatabaseNotFoundOrCreated(DatabaseResponse response) : base($"An error occurred fetching or creating Azure Cosmos database ({response.StatusCode}).") { } diff --git a/src/Common/Caching/ActionCacheFactoryBase.cs b/src/Common/Caching/ActionCacheFactoryBase.cs index 34ab463..8012288 100644 --- a/src/Common/Caching/ActionCacheFactoryBase.cs +++ b/src/Common/Caching/ActionCacheFactoryBase.cs @@ -19,10 +19,10 @@ public abstract class ActionCacheFactoryBase : IActionCacheFactory protected readonly IActionCacheRefreshProvider RefreshProvider; /// - /// The base constructor. + /// Initializes a new instance of the class. /// - /// entryOptionsAccessor global entry options accessor. - /// The refresh provider. + /// Accessor for the globally configured . + /// The provider used to refresh stale cache entries by re-invoking their originating actions. public ActionCacheFactoryBase( IOptions entryOptionsAccessor, IActionCacheRefreshProvider refreshProvider diff --git a/src/Common/Caching/ActionCacheOptionsBuilder.cs b/src/Common/Caching/ActionCacheOptionsBuilder.cs index 719cbe1..9e41623 100644 --- a/src/Common/Caching/ActionCacheOptionsBuilder.cs +++ b/src/Common/Caching/ActionCacheOptionsBuilder.cs @@ -65,7 +65,7 @@ public ActionCacheOptionsBuilder UseSqlServerCache(Action } /// - /// Enables the use of SQL Server cache. + /// Enables the use of Azure Cosmos DB as a cache backend. /// /// Returns this instance of . public ActionCacheOptionsBuilder UseAzureCosmosCache(Action configureOptions) diff --git a/src/Common/Caching/ActionCacheRefreshProvider.cs b/src/Common/Caching/ActionCacheRefreshProvider.cs index 40e74a4..fb93015 100644 --- a/src/Common/Caching/ActionCacheRefreshProvider.cs +++ b/src/Common/Caching/ActionCacheRefreshProvider.cs @@ -5,7 +5,7 @@ namespace ActionCache.Common.Caching; /// -/// A class responsible for executing controller actions for cache keys +/// Re-invokes cached controller actions to produce up-to-date values for each cache key. /// public class ActionCacheRefreshProvider : IActionCacheRefreshProvider { diff --git a/src/Common/Concurrency/CacheLockerBase.cs b/src/Common/Concurrency/CacheLockerBase.cs index c35ba3d..892599c 100644 --- a/src/Common/Concurrency/CacheLockerBase.cs +++ b/src/Common/Concurrency/CacheLockerBase.cs @@ -76,10 +76,7 @@ public virtual Task WaitForLockThenAsync(string resource, Action thenFunc) => /// The resource to acquire the lock for. /// The action to execute once the lock is acquired. /// A task representing the asynchronous operation. - /// - /// The action will be executed after the lock is acquired and released once the action completes. - /// If the lock acquisition fails, no action is executed. - /// + /// Thrown when the lock cannot be acquired within the configured timeout. public virtual async Task WaitForLockThenAsync(string resource, Func thenFunc) { var cacheLock = await WaitForLockAsync(resource); @@ -107,10 +104,7 @@ public virtual async Task WaitForLockThenAsync(string resource, Func thenF /// The resource to acquire the lock for. /// The function that will be executed once the lock is acquired, which returns a result. /// A task representing the asynchronous operation, with the result of the function. - /// - /// The result will be returned after the lock is acquired and released once the function completes. - /// If the lock acquisition fails, the result will be null. - /// + /// Thrown when the lock cannot be acquired within the configured timeout. public virtual async Task WaitForLockThenAsync(string resource, Func> resultAccessor) { TResult? result = default; diff --git a/src/Common/Concurrency/Interfaces/ICacheLockerHandler.cs b/src/Common/Concurrency/Interfaces/ICacheLockerHandler.cs index 25ae26c..505b6ea 100644 --- a/src/Common/Concurrency/Interfaces/ICacheLockerHandler.cs +++ b/src/Common/Concurrency/Interfaces/ICacheLockerHandler.cs @@ -28,10 +28,7 @@ public interface ICacheLockerHandler /// The resource to acquire the lock for. /// The action to execute once the lock is acquired. /// A task representing the asynchronous operation. - /// - /// The action will be executed after the lock is acquired and released once the action completes. - /// If the lock acquisition fails, no action is executed. - /// + /// Thrown when the lock cannot be acquired within the configured timeout. Task WaitForLockThenAsync(string resource, Func thenFunc); /// @@ -41,9 +38,6 @@ public interface ICacheLockerHandler /// The resource to acquire the lock for. /// The function that will be executed once the lock is acquired, which returns a result. /// A task representing the asynchronous operation, with the result of the function. - /// - /// The result will be returned after the lock is acquired and released once the function completes. - /// If the lock acquisition fails, the result will be null. - /// + /// Thrown when the lock cannot be acquired within the configured timeout. Task WaitForLockThenAsync(string resource, Func> resultAccessor); } \ No newline at end of file diff --git a/src/Common/Concurrency/Locks/CacheLock.cs b/src/Common/Concurrency/Locks/CacheLock.cs index 99420ce..4534c1b 100644 --- a/src/Common/Concurrency/Locks/CacheLock.cs +++ b/src/Common/Concurrency/Locks/CacheLock.cs @@ -15,7 +15,7 @@ public CacheLock(string resource) } /// - /// Gets or sets the unique resource identifier associated with the lock. + /// Gets the unique resource identifier associated with the lock. /// public readonly string Resource; @@ -35,7 +35,7 @@ public CacheLock(string resource) public TimeSpan Timeout { get; set; } = TimeSpan.FromMilliseconds(150); /// - /// Gets the timestamp when the lock request was initiated. + /// Gets the UTC timestamp when the lock request was initiated. /// public DateTime DateRequested { get; } = DateTime.UtcNow; } \ No newline at end of file diff --git a/src/Common/Concurrency/Locks/NullCacheLock.cs b/src/Common/Concurrency/Locks/NullCacheLock.cs index f35aedc..ba57969 100644 --- a/src/Common/Concurrency/Locks/NullCacheLock.cs +++ b/src/Common/Concurrency/Locks/NullCacheLock.cs @@ -1,8 +1,7 @@ namespace ActionCache.Common.Concurrency.Locks; /// -/// Represents a no-operation cache lock that does not perform any locking mechanism. -/// This is useful as a fallback when no actual locking is required. +/// Represents a no-operation cache lock that always reports itself as acquired without performing any locking. /// public class NullCacheLock : CacheLock { diff --git a/src/Common/Concurrency/NullCacheLocker.cs b/src/Common/Concurrency/NullCacheLocker.cs index 2df1993..4497679 100644 --- a/src/Common/Concurrency/NullCacheLocker.cs +++ b/src/Common/Concurrency/NullCacheLocker.cs @@ -3,8 +3,7 @@ namespace ActionCache.Common.Concurrency; /// -/// Represents a no-operation cache locker that does not perform any actual locking mechanism. -/// It serves as a fallback implementation where a locking system is required but not enforced. +/// A no-operation that immediately grants every lock request without any blocking or synchronization. /// public class NullCacheLocker : CacheLockerBase { @@ -16,16 +15,14 @@ public NullCacheLocker() : base(TimeSpan.Zero, TimeSpan.Zero) } /// - /// Releases the specified lock asynchronously. Since this is a no-operation implementation, - /// the method completes immediately. + /// Releases the specified lock asynchronously as a no-operation and returns a completed task immediately. /// /// The lock to be released. /// A completed task. public override Task ReleaseLockAsync(NullCacheLock cacheLock) => Task.CompletedTask; /// - /// Attempts to acquire a lock for the specified resource asynchronously. - /// Since this is a no-operation implementation, it always returns a new lock immediately. + /// Returns a pre-acquired for the specified resource without any blocking. /// /// The resource to lock. /// A completed task containing the acquired lock. @@ -33,8 +30,7 @@ public override Task TryAcquireLockAsync(string resource) => Task.FromResult(new NullCacheLock(resource)); /// - /// Waits for a lock on the specified resource asynchronously. - /// Since this is a no-operation implementation, it immediately returns a new lock. + /// Returns a pre-acquired for the specified resource without any waiting. /// /// The resource to lock. /// A completed task containing the acquired lock. diff --git a/src/Common/EndpointFilters/ActionCacheEndpointEvictionFilterFactory.cs b/src/Common/EndpointFilters/ActionCacheEndpointEvictionFilterFactory.cs index f297762..7ee477b 100644 --- a/src/Common/EndpointFilters/ActionCacheEndpointEvictionFilterFactory.cs +++ b/src/Common/EndpointFilters/ActionCacheEndpointEvictionFilterFactory.cs @@ -5,7 +5,7 @@ namespace ActionCache.Filters; /// -/// Provides a custom filter factory for caching action results based on the configuration. +/// A filter factory attribute that creates an to evict cached entries for the configured namespace. /// [AttributeUsage(AttributeTargets.Method)] public class ActionCacheEndpointEvictionFilterFactory : ActionCacheEndpointFilterFactoryBase diff --git a/src/Common/EndpointFilters/ActionCacheEndpointFilterAbstractFactory.cs b/src/Common/EndpointFilters/ActionCacheEndpointFilterAbstractFactory.cs index e322334..d9a7f2b 100644 --- a/src/Common/EndpointFilters/ActionCacheEndpointFilterAbstractFactory.cs +++ b/src/Common/EndpointFilters/ActionCacheEndpointFilterAbstractFactory.cs @@ -26,7 +26,7 @@ public class ActionCacheEndpointFilterAbstractFactory : IActionCacheFilterAbstra protected readonly TemplateBinderFactory BinderFactory; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The cache factories used to create caches. /// The template binder for parsing route parameters for templated namespaces. @@ -40,14 +40,14 @@ TemplateBinderFactory binderFactory } /// - /// - /// - public IEndpointFilter CreateInstance(Namespace @namespace, FilterType type) => + /// Thrown if no cache instances could be created for the namespace. + /// Thrown if the specified filter type is not supported. + public IEndpointFilter CreateInstance(Namespace @namespace, FilterType type) => CreateInstance(@namespace, absoluteExpiration: null, slidingExpiration: null, type); /// - /// - /// + /// Thrown if no cache instances could be created for the namespace. + /// Thrown if the specified filter type is not supported. public IEndpointFilter CreateInstance(Namespace @namespace, TimeSpan? absoluteExpiration, TimeSpan? slidingExpiration, FilterType type) { ArgumentException.ThrowIfNullOrWhiteSpace(@namespace, nameof(@namespace)); diff --git a/src/Common/EndpointFilters/ActionCacheEndpointFilterFactoryBase.cs b/src/Common/EndpointFilters/ActionCacheEndpointFilterFactoryBase.cs index c950788..dd18891 100644 --- a/src/Common/EndpointFilters/ActionCacheEndpointFilterFactoryBase.cs +++ b/src/Common/EndpointFilters/ActionCacheEndpointFilterFactoryBase.cs @@ -8,7 +8,7 @@ namespace ActionCache.Filters; /// -/// Provides a base factory for creating instances of action cache filters. +/// Provides a base factory for creating instances of Minimal API endpoint cache filters. /// public abstract class ActionCacheEndpointFilterFactoryBase : Attribute { @@ -27,13 +27,13 @@ public abstract class ActionCacheEndpointFilterFactoryBase : Attribute public abstract IEndpointFilter CreateInstance(IServiceProvider serviceProvider); /// - /// + /// Resolves and creates an of the specified type with optional expiration settings. /// - /// The service provider. + /// The service provider used to resolve the abstract filter factory. /// The type of filter to be created. - /// The absolute expiration in milliseconds for a cache entry. - /// The sliding expiration in milliseconds for a cache entry. - /// An instance of a cache filter. + /// The absolute expiration duration for a cache entry, or for no absolute expiration. + /// The sliding expiration duration for a cache entry, or for no sliding expiration. + /// An instance representing the resolved cache filter. protected IEndpointFilter CreateInstance(IServiceProvider serviceProvider, FilterType type, TimeSpan? absoluteExpiration = null, diff --git a/src/Common/Filters/ActionCacheFilterAbstractFactory.cs b/src/Common/Filters/ActionCacheFilterAbstractFactory.cs index 8caef82..6bf74ef 100644 --- a/src/Common/Filters/ActionCacheFilterAbstractFactory.cs +++ b/src/Common/Filters/ActionCacheFilterAbstractFactory.cs @@ -25,7 +25,7 @@ public class ActionCacheFilterAbstractFactory : IActionCacheFilterAbstractFactor protected readonly TemplateBinderFactory BinderFactory; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The cache factories used to create caches. /// The template binder for parsing route parameters for templated namespaces. @@ -39,14 +39,14 @@ TemplateBinderFactory binderFactory } /// - /// - /// - public IFilterMetadata CreateInstance(Namespace @namespace, FilterType type) => + /// Thrown if no cache instances could be created for the namespace. + /// Thrown if the specified filter type is not supported. + public IFilterMetadata CreateInstance(Namespace @namespace, FilterType type) => CreateInstance(@namespace, absoluteExpiration: null, slidingExpiration: null, type); /// - /// - /// + /// Thrown if no cache instances could be created for the namespace. + /// Thrown if the specified filter type is not supported. public IFilterMetadata CreateInstance(Namespace @namespace, TimeSpan? absoluteExpiration, TimeSpan? slidingExpiration, FilterType type) { ArgumentException.ThrowIfNullOrWhiteSpace(@namespace, nameof(@namespace)); diff --git a/src/Common/Filters/ActionCacheFilterFactoryBase.cs b/src/Common/Filters/ActionCacheFilterFactoryBase.cs index 8504b69..bf4f3d6 100644 --- a/src/Common/Filters/ActionCacheFilterFactoryBase.cs +++ b/src/Common/Filters/ActionCacheFilterFactoryBase.cs @@ -27,14 +27,14 @@ public abstract class ActionCacheFilterFactoryBase : Attribute, IFilterFactory public abstract IFilterMetadata CreateInstance(IServiceProvider serviceProvider); /// - /// + /// Resolves and creates an of the specified type with optional expiration settings. /// - /// The service provider. + /// The service provider used to resolve the abstract filter factory. /// The type of filter to be created. - /// The absolute expiration in milliseconds for a cache entry. - /// The sliding expiration in milliseconds for a cache entry. - /// An instance of a cache filter. - protected IFilterMetadata CreateInstance(IServiceProvider serviceProvider, + /// The absolute expiration duration for a cache entry, or for no absolute expiration. + /// The sliding expiration duration for a cache entry, or for no sliding expiration. + /// An instance representing the resolved cache filter. + protected IFilterMetadata CreateInstance(IServiceProvider serviceProvider, FilterType type, TimeSpan? absoluteExpiration = null, TimeSpan? slidingExpiration = null diff --git a/src/Common/Keys/ActionCacheKeyComponents.cs b/src/Common/Keys/ActionCacheKeyComponents.cs index d055c18..97c1594 100644 --- a/src/Common/Keys/ActionCacheKeyComponents.cs +++ b/src/Common/Keys/ActionCacheKeyComponents.cs @@ -22,14 +22,12 @@ public class ActionCacheKeyComponents public const string ActionArgumentsKey = nameof(ActionArgumentsKey); /// - /// Gets or sets the route values for the current action. - /// These values are typically used to help uniquely identify the route for caching purposes. + /// Gets or sets the route values used to uniquely identify the route for caching purposes. /// public RouteValueDictionary? RouteValues { get; set; } = new(); /// - /// Gets or sets the dictionary of action arguments for the current action. - /// These arguments provide additional context for identifying the action and are used in caching. + /// Gets or sets the action arguments used as additional context for identifying and caching the action. /// public Dictionary? ActionArguments { get; set; } = new Dictionary(); @@ -45,11 +43,11 @@ public string Serialize() } /// - /// Deconstructs route values into string representations of an area, controller and action. + /// Deconstructs the route values into the area, controller, and action name components. /// - /// - /// - /// + /// The area name, or if not present in the route values. + /// The controller name, or if not present in the route values. + /// The action name, or if not present in the route values. public void Deconstruct(out string? area, out string? controller, out string? action) { ArgumentNullException.ThrowIfNull(RouteValues); diff --git a/src/Common/Utilities/Namespace.cs b/src/Common/Utilities/Namespace.cs index 5360d14..a0c75be 100644 --- a/src/Common/Utilities/Namespace.cs +++ b/src/Common/Utilities/Namespace.cs @@ -33,17 +33,17 @@ public string? ValueWithRouteTemplateParameters public string Create(string key) => Concat(Assembly, ValueWithRouteTemplateParameters ?? Value, key); /// - /// Allows implicit conversion of the Namespace instance to a string. + /// Implicitly converts a to its fully qualified string representation. /// - /// The Namespace instance. - /// A concatenated string with the assembly and namespace value. + /// The instance to convert. + /// A colon-separated string combining the assembly name and namespace value. public static implicit operator string(Namespace @this) => Concat(Assembly, @this.ValueWithRouteTemplateParameters ?? @this.Value); /// - /// Allows implicit conversion of a string to a Namespace instance. + /// Implicitly converts a string to a instance. /// - /// The string to convert. - /// A new Namespace instance based on the string. + /// The namespace value string. + /// A new wrapping the given string. public static implicit operator Namespace(string @namespace) => new Namespace(@namespace); /// diff --git a/src/Memory/ExpirationTokens/ExpirationTokenSources.cs b/src/Memory/ExpirationTokens/ExpirationTokenSources.cs index 931aa29..8592152 100644 --- a/src/Memory/ExpirationTokens/ExpirationTokenSources.cs +++ b/src/Memory/ExpirationTokens/ExpirationTokenSources.cs @@ -4,7 +4,7 @@ namespace ActionCache.Memory; /// -/// Class to manage expiration token sources using memory cache. +/// Manages instances used as expiration tokens for memory cache entries. /// public class ExpirationTokenSources : IExpirationTokenSources { @@ -14,9 +14,9 @@ public class ExpirationTokenSources : IExpirationTokenSources protected readonly IMemoryCache Cache; /// - /// Constructor for ExpirationTokenSources class. + /// Initializes a new instance of the class. /// - /// The memory cache to use. + /// The memory cache used to store and retrieve instances. public ExpirationTokenSources(IMemoryCache cache) => Cache = cache; /// diff --git a/src/Memory/ExpirationTokens/ExpirationTokenSourcesFallback.cs b/src/Memory/ExpirationTokens/ExpirationTokenSourcesFallback.cs index 8bb4516..42df5f7 100644 --- a/src/Memory/ExpirationTokens/ExpirationTokenSourcesFallback.cs +++ b/src/Memory/ExpirationTokens/ExpirationTokenSourcesFallback.cs @@ -8,7 +8,7 @@ namespace ActionCache.Memory; public class ExpirationTokenSourcesFallback : IExpirationTokenSources { /// - /// Tokens dictionary to store cancellationTokenSources based on keys + /// Thread-safe dictionary mapping cache keys to their associated instances. /// protected ConcurrentDictionary Tokens = new(); diff --git a/src/Memory/ExpirationTokens/Interfaces/IExpirationTokenSources.cs b/src/Memory/ExpirationTokens/Interfaces/IExpirationTokenSources.cs index 9775456..6f7719e 100644 --- a/src/Memory/ExpirationTokens/Interfaces/IExpirationTokenSources.cs +++ b/src/Memory/ExpirationTokens/Interfaces/IExpirationTokenSources.cs @@ -1,15 +1,15 @@ namespace ActionCache.Memory; /// -/// Interface for managing expiration token sources +/// Defines a mechanism for retrieving or creating instances keyed by a cache namespace. /// public interface IExpirationTokenSources { /// - /// Attempts to get or add a cancellation token source for the specified key + /// Retrieves an existing for the given key, or creates and stores a new one if none exists. /// - /// The key associated with the cancellation token source - /// The cancellation token source associated with the key - /// True if the cancellation token source was retrieved or added successfully, false otherwise + /// The cache key used to look up or register the token source. + /// When this method returns, contains the associated with . + /// if the token source was successfully retrieved or created; otherwise, . bool TryGetOrAdd(string key, out CancellationTokenSource cancellationTokenSource); } \ No newline at end of file diff --git a/src/Redis/RedisActionCacheFactory.cs b/src/Redis/RedisActionCacheFactory.cs index 5956e4a..9ef35b5 100644 --- a/src/Redis/RedisActionCacheFactory.cs +++ b/src/Redis/RedisActionCacheFactory.cs @@ -14,14 +14,14 @@ namespace ActionCache.Redis; public class RedisActionCacheFactory : ActionCacheFactoryBase { /// - /// An IDatabase representation of a Redis cache. + /// The Redis database instance used for cache read and write operations. /// protected readonly IDatabase Cache; /// - /// Constructor for RedisActionCacheFactory. + /// Initializes a new instance of the class. /// - /// ConnectionMultiplexer for Redis. + /// The Redis connection multiplexer used to obtain the database instance. /// The global entry options used for creation when expiration times are not supplied. /// The refresh provider to handle cache refreshes. public RedisActionCacheFactory( diff --git a/src/SqlServer/SqlServerActionCache.cs b/src/SqlServer/SqlServerActionCache.cs index e18d102..1c54eca 100644 --- a/src/SqlServer/SqlServerActionCache.cs +++ b/src/SqlServer/SqlServerActionCache.cs @@ -27,12 +27,9 @@ public SqlServerActionCache(IDistributedCache cache, ActionCacheContext Cache = cache; /// - /// Gets or sets the cache entry options that control the expiration and sliding expiration of cache items. + /// Creates the distributed cache entry options from the current . /// - /// - /// Creates the entry options for memory cache. - /// - /// The cache entry options applied to new entries. + /// A configured with the current sliding and absolute expiration values. private DistributedCacheEntryOptions CreateEntryOptions() => new DistributedCacheEntryOptions {