public void AddAopHandler(MethodBase methodBase, IList methodHandlers) { if (validatorType == ParameterValidatorType.UsageAttribute) { AddAopHandlerByUsageAttribute(methodBase, methodHandlers); } else { if (cachedHandlers == null) { cachedHandlers = new Dictionary <MethodBase, ParameterValidatorHandler>(); } ParameterValidatorHandler handler; if (!cachedHandlers.TryGetValue(methodBase, out handler)) { string paramName = this.parameterName; paramName = paramName.ToLower(); int paramIndex = -1; ParameterInfo paramInfo = null; var ps = methodBase.GetParameters(); for (int i = 0, len = ps.Length; i < len; i++) { var p = ps[i]; if (p.Name.ToLower() == paramName) { paramInfo = p; paramIndex = i; break; } } if (paramInfo == null) { throw new AopMethodParameterNotFoundException(methodBase.DeclaringType, methodBase.Name, paramName); } var validator = CreateValidator(validatorType, paramInfo.ParameterType, validatorParameters); handler = new ParameterValidatorHandler(paramIndex, validator); cachedHandlers[methodBase] = handler; } if (handler != null) { methodHandlers.Add(handler); } } }
private void AddAopHandlerByUsageAttribute(MethodBase methodBase, IList methodHandlers) { ParameterValidatorHandler handler; if (cachedStaticHandlers == null) { cachedStaticHandlers = new Dictionary <MethodBase, ParameterValidatorHandler>(); } if (!cachedStaticHandlers.TryGetValue(methodBase, out handler)) { List <int> paramIndexs = null; List <IParameterValidator> validators = null; var ps = methodBase.GetParameters(); for (int i = 0, len = ps.Length; i < len; i++) { var p = ps[i]; foreach (var attr in p.GetCustomAttributes <ParameterValidatorAttribute>(true)) { if (paramIndexs == null) { paramIndexs = new List <int>(); validators = new List <IParameterValidator>(); } paramIndexs.Add(i); IParameterValidator validator = attr.CreateValidator(p); if (validator != null) { validators.Add(validator); } } } if (paramIndexs != null) { handler = new ParameterValidatorHandler(paramIndexs.ToArray(), validators.ToArray()); } cachedStaticHandlers[methodBase] = handler; } if (handler != null) { methodHandlers.Add(handler); } }