/// <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; } }
/// <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; } }