public override async Task Invoke(AspectContext context, AspectDelegate next)
        {
            var parameters = context.ServiceMethod.GetParameters();

            //判断Method是否包含ref / out参数
            if (parameters.Any(it => it.IsIn || it.IsOut))
            {
                await next(context);
            }
            else
            {
                var key = string.IsNullOrEmpty(CacheKey)
                    ? new CacheKey(context.ServiceMethod, parameters).GetHashCode().ToString()
                    : CacheKey;
                var value = await DistributedCacheManager.GetAsync(key);

                if (value != null)
                {
                    context.ReturnValue = value;
                }
                else
                {
                    await context.Invoke(next);

                    await DistributedCacheManager.SetAsync(key, context.ReturnValue, Expiration);
                    await next(context);
                }
            }
        }
Пример #2
0
        public async Task <OperatorModel> GetCurrent()
        {
            var result = await DistributedCacheManager.GetAsync <OperatorModel>(_operatorCacheKey);

            return(result);
            // return (OperatorModel)ByteConvertHelper.Bytes2Object(result);
        }
        public override async Task Invoke(AspectContext context, AspectDelegate next)
        {
            var parameters = context.ServiceMethod.GetParameters();

            //判断Method是否包含ref / out参数
            if (parameters.Any(it => it.IsIn || it.IsOut))
            {
                await next(context);
            }
            else
            {
                var key = string.IsNullOrEmpty(CacheKey)
                    ? new CacheKey(context.ServiceMethod, parameters, context.Parameters).GetRedisCacheKey()
                    : CacheKey;
                var value = await DistributedCacheManager.GetAsync(key);

                if (value != null)
                {
                    if (context.ServiceMethod.IsReturnTask())
                    {
                        dynamic result = JsonConvert.DeserializeObject(value,
                                                                       context.ServiceMethod.ReturnType.GenericTypeArguments[0]);
                        context.ReturnValue = Task.FromResult(result);
                    }
                    else
                    {
                        context.ReturnValue = JsonConvert.DeserializeObject(value, context.ServiceMethod.ReturnType);
                    }
                }
                else
                {
                    await context.Invoke(next);

                    dynamic returnValue = context.ReturnValue;
                    if (context.ServiceMethod.IsReturnTask())
                    {
                        returnValue = returnValue.Result;
                    }
                    await DistributedCacheManager.SetAsync(key, returnValue, Expiration);

                    //await next(context);
                }
            }
        }
        public override async Task Invoke(AspectContext context, AspectDelegate next)
        {
            var parameters = context.ServiceMethod.GetParameters();

            //判断Method是否包含ref / out参数
            if (parameters.Any(it => it.IsIn || it.IsOut))
            {
                await next(context);
            }
            else
            {
                var key = string.IsNullOrEmpty(CacheKey)
                    ? new CacheKey(context.ServiceMethod, parameters, context.Parameters).GetRedisCacheKey()
                    : CacheKey;
                var value = await DistributedCacheManager.GetAsync(key);

                if (value != null)
                {
                    context.ReturnValue = value;
                }
                else
                {
                    object returnValue = context.ReturnValue;
                    var    returnType  = context.ServiceMethod.ReturnType;
                    if (returnType.IsTask())
                    {
                        returnType  = returnType.GenericTypeArguments[0];
                        returnValue = typeof(Task).GetMethod("FromResult").MakeGenericMethod(new Type[] { returnType })
                                      .Invoke(this, new[] { returnValue });
                    }
                    await context.Invoke(next);

                    await DistributedCacheManager.SetAsync(key, returnValue, Expiration);
                    await next(context);
                }
            }
        }