hutongqing
2024-11-20 70233af5426b0d1c343ebe87183303a34a9aaa58
WIDESEAWCS_Server/WIDESEAWCS_Core/AOP/CacheAOP.cs
@@ -89,16 +89,21 @@
        protected string CustomCacheKey(IInvocation invocation)
        {
            var typeName = invocation.TargetType.Name;
            //获取调用目标类型名称
            var methodName = invocation.Method.Name;
            //获取调用方法名称
            var methodArguments = invocation.Arguments.Select(GetArgumentValue).Take(3).ToList();//获取参数列表,最多三个
            string key = $"{typeName}:{methodName}:";
            //定义key,格式为:类型名称:方法名称:
            foreach (var param in methodArguments)
            {
                key = $"{key}{param}:";
                //遍历参数列表,将参数值添加到key中,格式为:参数值:
            }
            return key.TrimEnd(':');
            //返回key,去掉末尾的冒号
        }
        /// <summary>
@@ -109,41 +114,58 @@
        protected static string GetArgumentValue(object arg)
        {
            if (arg is DateTime)
                // 如果arg是DateTime类型,则返回其字符串表示形式
                return ((DateTime)arg).ToString("yyyyMMddHHmmss");
            if (!arg.IsNotEmptyOrNull())
                // 如果arg不是空或null,则返回其字符串表示形式
                return arg.ObjToString();
            if (arg != null)
            {
                // 如果arg不是空或null
                if (arg is Expression)
                {
                    // 如果arg是Expression类型
                    var obj = arg as Expression;
                    // 解析arg
                    var result = Resolve(obj);
                    // 返回MD5加密后的字符串
                    return MD5Helper.MD5Encrypt16(result);
                }
                else if (arg.GetType().IsClass)
                {
                    // 如果arg是类类型
                    // 将arg序列化为JSON字符串
                    return MD5Helper.MD5Encrypt16(JsonConvert.SerializeObject(arg));
                }
                // 否则,返回"value:"加上arg的字符串表示形式
                return $"value:{arg.ObjToString()}";
            }
            // 如果arg是空或null,则返回空字符串
            return string.Empty;
        }
        private static string Resolve(Expression expression)
        {
            // 创建一个ExpressionContext对象
            ExpressionContext expContext = new ExpressionContext();
            // 解析表达式,并指定解析类型为WhereSingle
            expContext.Resolve(expression, ResolveExpressType.WhereSingle);
            // 获取解析结果
            var value = expContext.Result.GetString();
            // 获取参数列表
            var pars = expContext.Parameters;
            // 遍历参数列表
            pars.ForEach(s =>
            {
                // 将参数名替换为参数值
                value = value.Replace(s.ParameterName, s.Value.ObjToString());
            });
            // 返回替换后的值
            return value;
        }
    }