using System.Text; using System.Text.RegularExpressions; namespace Core.Blueprint.Caching.Helpers { /// /// Helper class for generating consistent and normalized cache keys. /// public static class CacheKeyHelper { /// /// Generates a cache key based on the instance, method name, and parameters. /// /// The instance of the class. /// The method name related to the cache key. /// The parameters used to generate the key. /// A normalized cache key string. public static string GenerateCacheKey(object instance, string methodName, params object[] parameters) { var className = instance.GetType().Name; var keyBuilder = new StringBuilder($"{className}.{methodName}"); foreach (var param in parameters) { string normalizedParam = NormalizeParameter(param); keyBuilder.Append($".{normalizedParam}"); } return keyBuilder.ToString(); } /// /// Normalizes a parameter value for use in a cache key. /// /// The parameter to normalize. /// A normalized string representation of the parameter. private static string NormalizeParameter(object param) { if (param == null) { return "null"; } string paramString; if (param is DateTime dateTime) { paramString = dateTime.ToString("yyyyMMdd"); } else { paramString = param.ToString(); } // Replace special characters with an underscore. return Regex.Replace(paramString, @"[^a-zA-Z0-9]", "_"); } } }