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); } } }
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); } } }
public async Task AddCurrent(OperatorModel operatorModel) { await DistributedCacheManager.SetAsync(_operatorCacheKey, operatorModel, Expiration); }