/// <summary> /// Builds all of the validators for a given method, parameter position, with the defined RunWhen. /// </summary> /// <param name="method">The method.</param> /// <param name="parameterPosition">The parameter position.</param> /// <param name="runner">The runner.</param> /// <param name="runWhen">The run when.</param> /// <param name="parameterInfoMeta">Metadata about the parameters such as whether or not it is params</param> /// <returns></returns> public IValidator[] GetValidatorsFor(MethodInfo method, int parameterPosition, ValidatorRunner runner, RunWhen runWhen, out ParameterInfoMeta parameterInfoMeta) { MethodValidatorMetaInfo meta = type2MetaInfo[method.DeclaringType]; List <IValidator> validators = new List <IValidator>(); IValidatorBuilder[] builders = meta.GetBuilders(method, parameterPosition, out parameterInfoMeta); ParameterInfo[] parameters = method.GetParameters(); foreach (IValidatorBuilder builder in builders) { IValidator validator = builder.Build(runner, typeof(MethodInfo)); if (!IsValidatorOnPhase(validator, runWhen)) { continue; } if (string.IsNullOrEmpty(validator.FriendlyName)) { validator.FriendlyName = parameters[parameterPosition].Name; } validator.Initialize(registry, null); validators.Add(validator); } return(validators.ToArray()); }
private MethodValidatorMetaInfo CreateMetaInfo(Type service, Type implementation) { if (type2MetaInfo.Keys.Contains(service)) { return(type2MetaInfo[service]); } MethodValidatorMetaInfo meta = new MethodValidatorMetaInfo(); foreach (MethodInfo methodInfo in implementation.GetMethods(DefaultBindingFlags)) { MethodInfo serviceMethodInfo = service == implementation ? methodInfo : GetMethodInfoFromService(service, implementation, methodInfo); ParameterInfo[] parameterInfo = methodInfo.GetParameters(); for (int parameterPosition = 0; parameterPosition < parameterInfo.Length; parameterPosition++) { ParameterInfo parameter = parameterInfo[parameterPosition]; object[] builders = parameter.GetCustomAttributes(typeof(IValidatorBuilder), true); foreach (IValidatorBuilder builder in builders) { builder.Initialize(registry, null); ParameterInfoMeta parameterMeta = GetParameterMeta(methodInfo); meta.AddBuilder(serviceMethodInfo, parameterPosition, builder, parameterMeta); } } } return(meta); }
public IValidatorBuilder[] GetBuilders(MethodInfo method, int parameterPosition, out ParameterInfoMeta parameterInfoMeta) { ParameterValidatorInvocation validatorInvocation = FindParameter(method, parameterPosition); if (validatorInvocation == null) { parameterInfoMeta = ParameterInfoMeta.None; return(new IValidatorBuilder[] {}); } parameterInfoMeta = validatorInvocation.ParameterInfoMeta; return(validatorInvocation.Builders.ToArray()); }
public ParameterValidatorInvocation(MethodInfo methodInfo, int parameterPosition, ParameterInfoMeta parameterInfoMeta) { this.methodInfo = methodInfo; this.parameterPosition = parameterPosition; this.parameterInfoMeta = parameterInfoMeta; }
public void AddBuilder(MethodInfo method, int parameterPosition, IValidatorBuilder builder, ParameterInfoMeta parameterMeta) { ParameterValidatorInvocation validatorInvocation = FindParameter(method, parameterPosition); if (validatorInvocation == null) { validatorInvocation = new ParameterValidatorInvocation(method, parameterPosition, parameterMeta); validatorInvocation.Builders.Add(builder); methodParameters.Add(validatorInvocation); Methods.Add(method); } else { validatorInvocation.Builders.Add(builder); } }
/// <summary> /// Builds all of the validators for a given method, parameter position, with the defined RunWhen. /// </summary> /// <param name="method">The method.</param> /// <param name="parameterPosition">The parameter position.</param> /// <param name="runner">The runner.</param> /// <param name="runWhen">The run when.</param> /// <param name="parameterInfoMeta">Metadata about the parameters such as whether or not it is params</param> /// <returns></returns> public IValidator[] GetValidatorsFor(MethodInfo method, int parameterPosition, ValidatorRunner runner, RunWhen runWhen, out ParameterInfoMeta parameterInfoMeta) { MethodValidatorMetaInfo meta = type2MetaInfo[method.DeclaringType]; List<IValidator> validators = new List<IValidator>(); IValidatorBuilder[] builders = meta.GetBuilders(method, parameterPosition, out parameterInfoMeta); ParameterInfo[] parameters = method.GetParameters(); foreach (IValidatorBuilder builder in builders) { IValidator validator = builder.Build(runner, typeof(MethodInfo)); if (!IsValidatorOnPhase(validator, runWhen)) continue; if (string.IsNullOrEmpty(validator.FriendlyName)) validator.FriendlyName = parameters[parameterPosition].Name; validator.Initialize(registry, null); validators.Add(validator); } return validators.ToArray(); }
public IValidatorBuilder[] GetBuilders(MethodInfo method, int parameterPosition, out ParameterInfoMeta parameterInfoMeta) { ParameterValidatorInvocation validatorInvocation = FindParameter(method, parameterPosition); if (validatorInvocation == null) { parameterInfoMeta = ParameterInfoMeta.None; return new IValidatorBuilder[] {}; } parameterInfoMeta = validatorInvocation.ParameterInfoMeta; return validatorInvocation.Builders.ToArray(); }