Ejemplo n.º 1
0
        public IValidationResult <T> Validate <T>(T model, Func <IValidationOptions, IValidationOptions> setOptions = null)
            where T : class
        {
            if (!Types.Contains(typeof(T)))
            {
                throw new SpecificationNotFoundException(typeof(T));
            }

            var validationOptions = setOptions != null
                ? OptionsService.GetVerifiedValidationOptions(setOptions(Options.ValidationOptions))
                : Options.ValidationOptions;

            var defaultTranslator = validationOptions.TranslationName != null
                ? TranslatorsRepository.Get(validationOptions.TranslationName)
                : TranslatorsRepository.GetOriginal();

            var translationProxy = new TranslationProxy(defaultTranslator, TranslatorsRepository);

            if (model == null)
            {
                switch (validationOptions.NullRootStrategy)
                {
                case NullRootStrategy.ArgumentNullException:
                {
                    throw new ArgumentNullException(nameof(model));
                }

                case NullRootStrategy.NoErrors:
                {
                    return(new ValidationResult <T>(Id, translationProxy, Options.ValidationOptions));
                }

                default:
                {
                    var report = new ErrorsCollection();

                    report.AddError(Options.ValidationOptions.RequiredError);

                    return(new ValidationResult <T>(Id, translationProxy, Options.ValidationOptions, null, report));
                }
                }
            }

            var specification = ValidatorsFactory.GetOrInit <T>();

            var executionContext = new ExecutionContext(validationOptions, ValidatorsFactory);

            var errorsCollection = ValidatorExecutor.Execute(specification, model, executionContext, validationOptions.ValidationStrategy, 0);

            return(new ValidationResult <T>(Id, translationProxy, Options.ValidationOptions, model, errorsCollection));
        }
Ejemplo n.º 2
0
        public MemberScope(PropertyInfo memberPropertyInfo, MemberSpecification <TModel, TMember> memberSpecification)
        {
            MemberPropertyInfo = memberPropertyInfo ?? throw new ArgumentNullException(nameof(memberPropertyInfo));
            MemberValidator    = MemberValidatorCreator.Create(memberSpecification ?? (m => m));
            Name = memberPropertyInfo.Name;

            _getErrors = (executableRule, model, executionContext, validationStrategy, depth) =>
            {
                var memberValue = model != null
                    ? (TMember)executableRule.MemberPropertyInfo.GetValue(model)
                    : default;

                return(ValidatorExecutor.ExecuteMember(
                           executableRule.MemberValidator,
                           model,
                           memberValue,
                           executionContext,
                           validationStrategy,
                           depth
                           ));
            };
        }