protected virtual void AddMethodParameterValidationErrors(MethodInvocationValidationContext context) { for (var i = 0; i < context.Parameters.Length; i++) { AddMethodParameterValidationErrors(context, context.Parameters[i], context.ParameterValues[i]); } }
protected virtual void ThrowValidationError(MethodInvocationValidationContext context) { throw new PlusValidationException( "Method arguments are not valid! See ValidationErrors for details.", context.Errors ); }
protected virtual bool IsValidationDisabled(MethodInvocationValidationContext context) { if (context.Method.IsDefined(typeof(EnableValidationAttribute), true)) { return(false); } if (ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault <DisableValidationAttribute>(context.Method) != null) { return(true); } return(false); }
public virtual void Validate(MethodInvocationValidationContext context) { Check.NotNull(context, nameof(context)); if (context.Parameters.IsNullOrEmpty()) { return; } if (!context.Method.IsPublic) { return; } if (IsValidationDisabled(context)) { return; } if (context.Parameters.Length != context.ParameterValues.Length) { throw new Exception("Method parameter count does not match with argument count!"); } //todo: consider to remove this condition if (context.Errors.Any() && HasSingleNullArgument(context)) { ThrowValidationError(context); } AddMethodParameterValidationErrors(context); if (context.Errors.Any()) { ThrowValidationError(context); } }
protected virtual bool HasSingleNullArgument(MethodInvocationValidationContext context) { return(context.Parameters.Length == 1 && context.ParameterValues[0] == null); }