示例#1
0
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var param = new List <object> {
                value
            };

            if (!string.IsNullOrWhiteSpace(ArgProperty))
            {
                param.Add(ArgProperty == "this" ? validationContext.ObjectInstance : validationContext.ObjectInstance.GetType().GetProperty(ArgProperty)?.GetValue(validationContext.ObjectInstance));
            }
            return((ValidationResult)ValidatorType.GetMethod(Method)?.Invoke(null, param.ToArray()));
        }
示例#2
0
        /// <summary>
        /// Запускает пользовательскую валидацию
        /// </summary>
        /// <param name="objectToValidate">объект для проверки</param>
        /// <param name="currentTarget">объект, на котором производится валидация</param>
        /// <param name="key">ключ, который идентифицирует источник <paramref name="objectToValidate"/></param>
        /// <param name="validationResults">результаты валидации</param>
        public override void DoValidate(object objectToValidate, object currentTarget, string key, ValidationResults validationResults)
        {
            bool isValid;
            var  messageTemplate = MessageTemplate;

            // Получаем информацию о методе и его параметрах
            var tempMethodInfo     = ValidatorType.GetMethod(Method);
            var tempParametersInfo = tempMethodInfo.GetParameters();

            // Заполняем массив типов параметров
            var parameterTypes = new Type[3];

            parameterTypes[0] = tempParametersInfo[0].ParameterType;
            parameterTypes[1] = tempParametersInfo[1].ParameterType;
            parameterTypes[2] = Type.GetType("System.String&");

            // Получаем информацию о методе
            var methodInfo = ValidatorType.GetMethod(Method, parameterTypes);

            // Заполняем массив фактических значений параметров
            var parameters = new object[3];

            parameters[0] = Converter.ChangeType(objectToValidate, parameterTypes[0]);
            parameters[1] = Converter.ChangeType(currentTarget, parameterTypes[1]);
            parameters[2] = null;

            // Вызываем метод и получаем результат проверки
            if (methodInfo.IsStatic)
            {
                isValid = (bool)methodInfo.Invoke(ValidatorType, parameters);
            }
            else
            {
                // Создаем экземпляр объекта
                var validatorObject = Activator.CreateInstance(ValidatorType);
                isValid = (bool)methodInfo.Invoke(validatorObject, parameters);
            }

            if (isValid == Negated)
            {
                MessageTemplate = !string.IsNullOrWhiteSpace(parameters[2]?.ToString())
                    ? parameters[2].ToString()
                    : messageTemplate;

                LogValidationResult(
                    validationResults,
                    string.Format(CultureInfo.CurrentCulture, MessageTemplate, objectToValidate, key, Tag, ValidatorType, Method),
                    currentTarget,
                    key
                    );
            }
        }
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            object arg = null;

            if (ArgProperty == "this")
            {
                arg = validationContext.ObjectInstance;
            }
            else
            {
                arg = validationContext.ObjectInstance.GetType().GetProperty(ArgProperty)?.GetValue(validationContext.ObjectInstance);
            }
            return((ValidationResult)ValidatorType.GetMethod(Method)?.Invoke(null, new object[] { value, arg }));
        }