Exemple #1
0
        private InterceptMethodElement FindInterceptMethodElement(InterceptContractElement interceptContractElement, MethodInfo method)
        {
            if (interceptContractElement == null)
            {
                return(null);
            }
            if (interceptContractElement.Methods == null)
            {
                return(null);
            }

            foreach (InterceptMethodElement interceptMethodElement in interceptContractElement.Methods)
            {
                string methodSignature = null;
                if (method.IsGenericMethod)
                {
                    methodSignature = method.GetGenericMethodDefinition().GetSignature();
                }
                else
                {
                    methodSignature = method.GetSignature();
                }
                if (interceptMethodElement.Signature.Equals(methodSignature))
                {
                    return(interceptMethodElement);
                }
            }
            return(null);
        }
Exemple #2
0
        /// <summary>
        /// 返回一个<see cref ="System.String"/>值的列表,它表示通过给定方法引用的拦截器引用的类型.
        /// </summary>
        /// <param name="contractType">该方法的类型.</param>
        /// <param name="method">方法.</param>
        /// <returns>包含拦截器类型的<see cref ="System.String"/>值列表.</returns>
        public IEnumerable <string> GetInterceptorTypes(Type contractType, MethodInfo method)
        {
            if (this.Interception == null ||
                this.Interception.Interceptors == null ||
                this.Interception.Contracts == null)
            {
                return(null);
            }

            InterceptContractElement interceptContractElement = this.FindInterceptContractElement(contractType);

            if (interceptContractElement == null)
            {
                return(null);
            }

            InterceptMethodElement interceptMethodElement = this.FindInterceptMethodElement(interceptContractElement, method);

            if (interceptMethodElement == null)
            {
                return(null);
            }

            var interceptorRefNames = this.FindInterceptorRefNames(interceptMethodElement);

            if (interceptorRefNames == null || interceptorRefNames.Count() == 0)
            {
                return(null);
            }

            List <string> ret = new List <string>();

            foreach (var interceptorRefName in interceptorRefNames)
            {
                var interceptorTypeName = this.FindInterceptorTypeNameByRefName(interceptorRefName);
                if (!string.IsNullOrEmpty(interceptorTypeName))
                {
                    ret.Add(interceptorTypeName);
                }
            }
            return(ret);
        }
Exemple #3
0
 /// <summary>
 /// Adds an interception reference to the specified contract and the method.
 /// </summary>
 /// <param name="contractType">The type of the contract.</param>
 /// <param name="method">The method.</param>
 /// <param name="name">The name of the interception reference.</param>
 public void AddInterceptorRef(Type contractType, MethodInfo method, string name)
 {
     if (this.config.Interception != null)
     {
         if (this.config.Interception.Contracts != null)
         {
             foreach (InterceptContractElement interceptContract in this.config.Interception.Contracts)
             {
                 if (interceptContract.Type.Equals(contractType.AssemblyQualifiedName))
                 {
                     if (interceptContract.Methods != null)
                     {
                         foreach (InterceptMethodElement interceptMethod in interceptContract.Methods)
                         {
                             if (interceptMethod.Signature.Equals(method.GetSignature()))
                             {
                                 if (interceptMethod.InterceptorRefs != null)
                                 {
                                     foreach (InterceptorRefElement interceptorRef in interceptMethod.InterceptorRefs)
                                     {
                                         if (interceptorRef.Name.Equals(name))
                                         {
                                             return;
                                         }
                                     }
                                     interceptMethod.InterceptorRefs.Add(new InterceptorRefElement {
                                         Name = name
                                     });
                                 }
                                 else
                                 {
                                     interceptMethod.InterceptorRefs = new InterceptorRefElementCollection();
                                     interceptMethod.InterceptorRefs.Add(new InterceptorRefElement {
                                         Name = name
                                     });
                                 }
                                 return;
                             }
                         }
                         InterceptMethodElement interceptMethodAdd = new InterceptMethodElement();
                         interceptMethodAdd.Signature       = method.GetSignature();
                         interceptMethodAdd.InterceptorRefs = new InterceptorRefElementCollection();
                         interceptMethodAdd.InterceptorRefs.Add(new InterceptorRefElement {
                             Name = name
                         });
                         interceptContract.Methods.Add(interceptMethodAdd);
                     }
                     else
                     {
                         interceptContract.Methods = new InterceptMethodElementCollection();
                         InterceptMethodElement interceptMethodAdd = new InterceptMethodElement();
                         interceptMethodAdd.Signature       = method.GetSignature();
                         interceptMethodAdd.InterceptorRefs = new InterceptorRefElementCollection();
                         interceptMethodAdd.InterceptorRefs.Add(new InterceptorRefElement {
                             Name = name
                         });
                         interceptContract.Methods.Add(interceptMethodAdd);
                     }
                     return;
                 }
             }
             InterceptContractElement interceptContractAdd = new InterceptContractElement();
             interceptContractAdd.Type    = contractType.AssemblyQualifiedName;
             interceptContractAdd.Methods = new InterceptMethodElementCollection();
             InterceptMethodElement interceptMethodAddToContract = new InterceptMethodElement();
             interceptMethodAddToContract.Signature       = method.GetSignature();
             interceptMethodAddToContract.InterceptorRefs = new InterceptorRefElementCollection();
             interceptMethodAddToContract.InterceptorRefs.Add(new InterceptorRefElement {
                 Name = name
             });
             interceptContractAdd.Methods.Add(interceptMethodAddToContract);
             this.config.Interception.Contracts.Add(interceptContractAdd);
         }
         else
         {
             this.config.Interception.Contracts = new InterceptContractElementCollection();
             InterceptContractElement interceptContractAdd = new InterceptContractElement();
             interceptContractAdd.Type    = contractType.AssemblyQualifiedName;
             interceptContractAdd.Methods = new InterceptMethodElementCollection();
             InterceptMethodElement interceptMethodAddToContract = new InterceptMethodElement();
             interceptMethodAddToContract.Signature       = method.GetSignature();
             interceptMethodAddToContract.InterceptorRefs = new InterceptorRefElementCollection();
             interceptMethodAddToContract.InterceptorRefs.Add(new InterceptorRefElement {
                 Name = name
             });
             interceptContractAdd.Methods.Add(interceptMethodAddToContract);
             this.config.Interception.Contracts.Add(interceptContractAdd);
         }
     }
     else
     {
         this.config.Interception           = new InterceptionElement();
         this.config.Interception.Contracts = new InterceptContractElementCollection();
         InterceptContractElement interceptContractAdd = new InterceptContractElement();
         interceptContractAdd.Type    = contractType.AssemblyQualifiedName;
         interceptContractAdd.Methods = new InterceptMethodElementCollection();
         InterceptMethodElement interceptMethodAddToContract = new InterceptMethodElement();
         interceptMethodAddToContract.Signature       = method.GetSignature();
         interceptMethodAddToContract.InterceptorRefs = new InterceptorRefElementCollection();
         interceptMethodAddToContract.InterceptorRefs.Add(new InterceptorRefElement {
             Name = name
         });
         interceptContractAdd.Methods.Add(interceptMethodAddToContract);
         this.config.Interception.Contracts.Add(interceptContractAdd);
     }
 }