Esempio n. 1
0
        /// <summary>
        /// 拦截方法执行完成后
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnSuccess(MethodExecutionArgs eventArgs)
        {
            // 获取key
            string[] keys = (string[])eventArgs.MethodExecutionTag;
            if (keys == null || keys.Length != 2)
            {
                return;
            }

            string         key           = keys[0];
            string         valKey        = keys[1];
            var            methodReturn  = eventArgs.ReturnValue;
            ICacheProvider cacheProvider = EngineContext.Current.ServiceLocator.GetInstance <ICacheProvider>(CacheProviderType.ToString());

            switch (Method)
            {
            case CachingMethod.Get:
                AddCache(cacheProvider, key, valKey, methodReturn);
                break;

            case CachingMethod.Put:
                if (cacheProvider.Exists(key))
                {
                    if (Force)
                    {
                        cacheProvider.Remove(key);
                        AddCache(cacheProvider, key, valKey, methodReturn);
                    }
                    else
                    {
                        PutCache(cacheProvider, key, valKey, methodReturn);
                    }
                }
                else
                {
                    AddCache(cacheProvider, key, valKey, methodReturn);
                }
                break;

            case CachingMethod.Remove:
                var    removeKeys = CorrespondingMethodNames;
                string rk         = string.Empty;

                foreach (var removeKey in removeKeys)
                {
                    rk = eventArgs.Method.DeclaringType == null ? removeKey :
                         eventArgs.Method.DeclaringType + "." + removeKey;

                    if (cacheProvider.Exists(rk))
                    {
                        cacheProvider.Remove(rk);
                    }
                }
                break;

            default:
                break;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 进入方法时
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnEntry(MethodExecutionArgs eventArgs)
        {
            string key = eventArgs.Method.DeclaringType == null ?
                         eventArgs.Method.Name :
                         eventArgs.Method.DeclaringType + "." + eventArgs.Method.Name;

            string valKey = GetValueKey(eventArgs);

            ICacheProvider cacheProvider = EngineContext.Current.ServiceLocator.GetInstance <ICacheProvider>(CacheProviderType.ToString());

            switch (Method)
            {
            case CachingMethod.Get:
                if (cacheProvider.Exists(key, valKey))
                {
                    var value = cacheProvider.Get(key, valKey);
                    eventArgs.ReturnValue  = value;
                    eventArgs.FlowBehavior = FlowBehavior.Return;
                }
                else
                {
                    eventArgs.MethodExecutionTag = new[] { key, valKey };
                }
                break;

            case CachingMethod.Put:
                eventArgs.MethodExecutionTag = new[] { key, valKey };
                break;

            case CachingMethod.Remove:
                var    removeKeys = CorrespondingMethodNames;
                string rk         = string.Empty;
                foreach (var removeKey in removeKeys)
                {
                    rk = eventArgs.Method.DeclaringType == null ? removeKey :
                         eventArgs.Method.DeclaringType + "." + removeKey;

                    if (cacheProvider.Exists(rk))
                    {
                        cacheProvider.Remove(rk);
                    }
                }
                break;

            default:
                break;
            }
        }