Example #1
0
        private IEnumerable <IInterceptorProvider> GetInterceptorProvidersForMethod(MethodInfo proxyMethod, object target, out NonInterceptableAttribute nonInterceptableAttribute)
        {
            MethodInfo targetMethod = this.GetTargetMethod(proxyMethod, target);

            if (null == targetMethod)
            {
                nonInterceptableAttribute = null;
                return(new IInterceptorProvider[0]);
            }

            var attribute = CustomAttributeAccessor.GetCustomAttribute <NonInterceptableAttribute>(targetMethod);

            nonInterceptableAttribute = attribute;
            var providers = CustomAttributeAccessor.GetCustomAttributes <IInterceptorProvider>(targetMethod);

            if (null != attribute)
            {
                if (!nonInterceptableAttribute.InterceptorProviderTypes.Any())
                {
                    return(new IInterceptorProvider[0]);
                }
                providers = providers.Where(it => !attribute.InterceptorProviderTypes.Contains(it.GetType()));
            }

            foreach (var provider in providers)
            {
                (provider as IAttributeCollection)?.AddRange(CustomAttributeAccessor.GetCustomAttributes(proxyMethod, true));
                (provider as IAttributeCollection)?.AddRange(CustomAttributeAccessor.GetCustomAttributes(target.GetType(), true));
            }
            return(providers);
        }
Example #2
0
        private IEnumerable <IInterceptorProvider> GetInterceptorProvidersForClass(object target, out NonInterceptableAttribute nonInterceptableAttribute)
        {
            var attribute = CustomAttributeAccessor.GetCustomAttribute <NonInterceptableAttribute>(target.GetType());

            nonInterceptableAttribute = attribute;
            var providers = target.GetType().GetTypeInfo().GetCustomAttributes().OfType <IInterceptorProvider>();

            if (null != attribute)
            {
                if (!nonInterceptableAttribute.InterceptorProviderTypes.Any())
                {
                    return(new IInterceptorProvider[0]);
                }
                providers = providers.Where(it => !attribute.InterceptorProviderTypes.Contains(it.GetType()));
            }
            foreach (var provider in providers)
            {
                (provider as IAttributeCollection)?.AddRange(CustomAttributeAccessor.GetCustomAttributes(target.GetType(), true));
            }
            return(providers);
        }