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); }
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); }