CleanAOP.Intercepts.AopIntercept.Intercept C# (CSharp) Method

Intercept() public method

public Intercept ( IInvocation invocation ) : void
invocation IInvocation
return void
        public void Intercept(IInvocation invocation)
        {
            var Attributes = invocation.MethodInvocationTarget.GetCustomAttributes(true);

            foreach(var attribute in Attributes)
            {
                if(attribute is CleanAopAttribute)
                {
                    if((attribute as CleanAopAttribute).Location==InvokeLocation.Before
                        || (attribute as CleanAopAttribute).Location == InvokeLocation.Both )
                    {
                        (attribute as CleanAopAttribute).Before();
                    }
                }
            }

            if (Regex.IsMatch(invocation.Method.Name, @"[gs]et_") || Attributes.Count(p =>
            { return (p is CleanAopAttribute && (p as CleanAopAttribute).IsInnerInvoke == true); }) <= 0)
            {
                invocation.Proceed();
            }

            foreach (var attribute in Attributes)
            {
                if (attribute is CleanAopAttribute)
                {
                    (attribute as CleanAopAttribute).Middle(invocation);
                }
            }
            

            if (invocation.ReturnValue is Task)
            {
                (invocation.ReturnValue as Task).ContinueWith(delegate(Task t) {
                    AfterInvoke(Attributes,invocation,t.Exception);
                });
            }
            else
            {
                AfterInvoke(Attributes, invocation,null);
            }
        }
        private void AfterInvoke(object[] Attributes,IInvocation invocation, Exception exp)