public Func<IAspectDefinition, IAspectExpressionBuilder> Visit(MethodInterceptionAspectAttribute aspect) { return aspectDefinition => { Func<IAspectExpression, IAspectExpression> ctor = null; var _topAspectInScopeDefinition = (IMethodAspectDefinition)topAspectInScopeDefinition; var methodAspectDefinition = aspectDefinition as IMethodAspectDefinition; if (lastAspect.Top) { ctor = expression => { return new TopMethodInterceptionAspectExpression(expression, methodAspectDefinition); }; lastAspect = new Aspect(); } else { if (lastAspect.IsInBinding) { if (lastAspect.IsTopBinding) { lastAspect.IsTopBinding = false; ctor = expression => { return new TopBindingMethodInterceptionAspectExpression(expression, methodAspectDefinition); }; } else { ctor = expression => { return new BindingMethodInterceptionAspectExpression(expression, methodAspectDefinition, _topAspectInScopeDefinition); }; } } else { ctor = expression => { return new NestedMethodInterceptionAspectExpression(expression, methodAspectDefinition, _topAspectInScopeDefinition); }; } } lastAspect.IsInBinding = true; lastAspect.IsTopBinding = true; topAspectInScopeDefinition = aspectDefinition; return new AspectNodeExpressionBuilder(ctor); }; }
internal MethodInterceptionAspectDefinition(MethodInterceptionAspectAttribute aspect, Type aspectDeclaringType, MethodInfo method, MemberInfo target) : base(aspect, aspectDeclaringType, method, target) { this.aspect = aspect; }