Пример #1
0
        public void Invoke(object value, IValidationReport report, ValidationReportDepth depth)
        {
            //If validating an Expression that has already failed a rule, then skip.
            if (depth == ValidationReportDepth.FieldShortCircuit && report.HasError(value, _originatingExpression))
            {
                return;
            }

            var originatingValue = (T)value;
            R   valueToValidate;

            if (!_valueToValidate.TryGetValue(originatingValue, out valueToValidate))
            {
                return;
            }
            var result = _rule.Validate(valueToValidate);

            if (!result.IsValid)
            {
                var culpritResults = _culpritResolver.Resolve(originatingValue);
                foreach (var culpritResult in culpritResults)
                {
                    report.AddError(new ValidationError(_rule, culpritResult.Expression, result.Arguments, culpritResult.Value, originatingValue, _originatingExpression));
                }
            }
        }