public void Intercept(IInvocation invocation) { var entity = invocation.InvocationTarget; if (Inited) { var joinDefine = metadata.GetClassJoinDefineMetadata(invocation.Method); if (joinDefine != null) { if (joinDefine.JoinType == MethodJoinType.PropertySet) { var data = invocation.Arguments[0]; if (data == null) { caches.Remove(joinDefine.JoinName); } else { caches[joinDefine.JoinName] = data; } invocation.Proceed(); return; } else if (joinDefine.JoinType == MethodJoinType.PropertyGet) { if (caches.ContainsKey(joinDefine.JoinName)) { invocation.ReturnValue = caches[joinDefine.JoinName]; return; } } ProfilerContext.Current.Trace("platform", String.Format("intercept method {0}.{1}", invocation.Method.DeclaringType.ToPrettyString(), invocation.Method.Name)); log.DebugFormat("intercept property {0}.{1}", invocation.Method.DeclaringType.ToPrettyString(), invocation.Method.Name); invocation.ReturnValue = joinDefine.DataProcesser.Process(entity); if (joinDefine.JoinType == MethodJoinType.PropertyGet) { caches[joinDefine.JoinName] = invocation.ReturnValue; } return; } } invocation.Proceed(); }
public bool ShouldInterceptMethod(Type type, MethodInfo methodInfo) { return(!SkippedTypes.Contains(methodInfo.DeclaringType) && metadata.GetClassJoinDefineMetadata(methodInfo) != null); }