public void Intercept(IInvocation invocation)
        {
            var report = _reportFactory.CurrentTestReport;

            EventReportAttribute attribute = GetEventReportAttribute(invocation);

            if (report != null && IsAligibleForReporting(invocation, attribute))
            {
                ReportAndProceed(invocation, report);
            }
            else
            {
                invocation.Proceed();
            }
        }
        private static Boolean IsAligibleForReporting(IInvocation invocation, EventReportAttribute attribute)
        {
            if (attribute != null && attribute.Ignore)
            {
                return(false);
            }

            if (invocation.Method.IsSpecialName)
            {
                return(IsPropertySetter(invocation));
            }

            if (invocation.Method.GetBaseDefinition().DeclaringType == typeof(Object))
            {
                return(false);
            }

            return(true);
        }