private string BuildCacheKey(Arguments arguments, A.Core.Interface.IService instance) { var sb = new StringBuilder(); if (!string.IsNullOrWhiteSpace(_prefix)) { sb.Append(_prefix); } else { sb.Append(_className); sb.Append("."); sb.Append(_methodName); } if (_isUserContextAware) { var userId = instance.ActionContext.Value.Data["UserId"].ToString(); sb.Append(".u." + userId); } sb.Append(":"); string output = JsonConvert.SerializeObject(arguments, jsonSerializerSettings); sb.Append(output); return(sb.ToString()); }
public override async void OnSuccess(MethodExecutionArgs args) { A.Core.Interface.IService instance = (A.Core.Interface.IService)args.Instance; var cacheClient = instance.ActionContext.Value.CurrentContainer.Resolve <ICacheClient>(); await cacheClient.RemoveByPrefixAsync(_prefix); base.OnSuccess(args); }
public override void OnSuccess(MethodExecutionArgs args) { A.Core.Interface.IService instance = (A.Core.Interface.IService)args.Instance; var cacheClient = instance.ActionContext.Value.CurrentContainer.Resolve <ICacheClient>(); string key = (string)args.MethodExecutionTag; if (_expirationType == ExpirationType.Default) { cacheClient.AddAsync(key, args.ReturnValue).GetAwaiter().GetResult(); } else if (_expirationType == ExpirationType.ExpiresIn) { TimeSpan span = TimeSpan.Parse(_expirationPattern); cacheClient.AddAsync(key, args.ReturnValue, span).GetAwaiter().GetResult(); } }
public override void OnEntry(MethodExecutionArgs args) { A.Core.Interface.IService instance = (A.Core.Interface.IService)args.Instance; var cacheClient = instance.ActionContext.Value.CurrentContainer.Resolve <ICacheClient>(); var key = BuildCacheKey(args.Arguments, instance); var cacheResultTask = (dynamic)_getFromCacheMethodInfo.Invoke(cacheClient, new string[] { key }); var cacheResult = cacheResultTask.GetAwaiter().GetResult(); if (cacheResult.HasValue) { args.ReturnValue = cacheResult.Value; args.FlowBehavior = FlowBehavior.Return; } else { args.MethodExecutionTag = key; } }