コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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;
            }
        }