コード例 #1
0
        public Interceptor[] GetPropertyInterceptors(Type interceptorType, PropertyInfo property, out MethodInfo[] methods)
        {
            if (_interceptorResolver == null)
            {
                throw new InvalidOperationException("Weld component manager is not yet deployed");
            }

            var resolvable   = new InterceptorResolvable(interceptorType, property);
            var interceptors = _interceptorResolver.Resolve(resolvable).ToArray();

            if (interceptors.Any())
            {
                methods = new[] { property.SetMethod, property.GetMethod }.Where(x => x != null).ToArray();
                foreach (var method in methods)
                {
                    InterceptionValidator.ValidateInterceptableMethod(method, resolvable);
                }
            }
            else
            {
                methods = new MethodInfo[0];
            }

            return(interceptors);
        }
コード例 #2
0
        public override void OnIntercept(IInvocation invocation)
        {
            if (_validator == null)
            {
                _validator = new InterceptionValidator(s_infoProvider, invocation.Context.MethodInfo);
            }

            var context = new ValidationContext(invocation.Context);

            _validator.ValidateArguments(context);
            invocation.Proceed();
            _validator.ValidateReturnValue(context);
        }
コード例 #3
0
        public Interceptor[] GetMethodInterceptors(Type interceptorType, MethodInfo methodInfo)
        {
            if (_interceptorResolver == null)
            {
                throw new InvalidOperationException("Weld component manager is not yet deployed");
            }

            var resolvable   = new InterceptorResolvable(interceptorType, methodInfo);
            var interceptors = _interceptorResolver.Resolve(resolvable).ToArray();

            if (interceptors.Any())
            {
                InterceptionValidator.ValidateInterceptableMethod(methodInfo, resolvable);
            }

            return(interceptors);
        }
コード例 #4
0
        public Interceptor[] GetClassInterceptors(Type interceptorType, IComponent component, out MethodInfo[] methods)
        {
            if (_interceptorResolver == null)
            {
                throw new InvalidOperationException("Weld component manager is not yet deployed");
            }

            var intercetorResolvable = new InterceptorResolvable(interceptorType, component);
            var interceptors         = _interceptorResolver.Resolve(intercetorResolvable).ToArray();
            var allowPartial         = interceptors.All(x => x.AllowPartialInterception);

            if (interceptors.Any())
            {
                InterceptionValidator.ValidateInterceptableClass(component.Type, intercetorResolvable, allowPartial, out methods);
            }
            else
            {
                methods = new MethodInfo[0];
            }

            return(interceptors);
        }