Esempio n. 1
0
        /// <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());
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
 public ParameterValidatorInvocation(MethodInfo methodInfo, int parameterPosition, ParameterInfoMeta parameterInfoMeta)
 {
     this.methodInfo        = methodInfo;
     this.parameterPosition = parameterPosition;
     this.parameterInfoMeta = parameterInfoMeta;
 }
Esempio n. 5
0
        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 ParameterValidatorInvocation(MethodInfo methodInfo, int parameterPosition, ParameterInfoMeta parameterInfoMeta)
			{
				this.methodInfo = methodInfo;
				this.parameterPosition = parameterPosition;
				this.parameterInfoMeta = parameterInfoMeta;
			}
		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 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);
			}
		}