Esempio n. 1
0
        private static async Task <ValidationResult> ValidateInternal <T>(IValidationRuleSet <T> ruleSet, T instance, ValidationContext context)
        {
            var validationMap = new Dictionary <RuleIdentity, ValidationResult>();
            var result        = new ValidationResult();
            var chain         = ruleSet.GetValidationChain();

            try
            {
                foreach (var validationChainMember in chain)
                {
                    if (await CheckDependsOnMembers(chain, instance, validationChainMember, validationMap, result, context))
                    {
                        await ProcessRule(instance, validationChainMember, validationMap, result, context);
                    }
                }
            }
            catch (AggregateException ex) when(ex.InnerException is ValidationStoppedException valException)
            {
                result.MergeResult(valException.Result);
            }
            catch (ValidationStoppedException ex)
            {
                result.MergeResult(ex.Result);
            }

            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// Валидирует объект набором правил и генерирует исключение,
        /// если результат содержит ошибки
        /// </summary>
        /// <typeparam name="T">Тип объекта валидации</typeparam>
        /// <param name="validator">Валидатор</param>
        /// <param name="ruleSet">Набор правил валидации</param>
        /// <param name="instance">Ссылка на объект валидации</param>
        /// <param name="context">Контекст валидации</param>
        public static void ValidateAndThrow <T>(
            this IValidator validator, IValidationRuleSet <T> ruleSet, T instance, ValidationContext context)
        {
            var result = validator.Validate(ruleSet, instance, context);

            ThrowIfIsNotValid(result);
        }
Esempio n. 3
0
        protected IValidationChainMemberBuilder <T> SetCollectionContext <TEntity>(
            Expression <Func <T, IEnumerable <TEntity> > > expression, IValidationRuleSet <TEntity> ruleSet)
        {
            var member = AddCollectionMemberToChain(expression, new[] { ruleSet });

            return(new ValidationChainMemberBuilder <T>(this, member));
        }
Esempio n. 4
0
        /// <summary>
        /// Валидирует объект набором правил и генерирует исключение,
        /// если результат содержит ошибки
        /// </summary>
        /// <typeparam name="T">Тип объекта валидации</typeparam>
        /// <param name="validator">Валидатор</param>
        /// <param name="ruleSet">Набор правил валидации</param>
        /// <param name="instance">Ссылка на объект валидации</param>
        /// <param name="context">Контекст валидации</param>
        public static Task ValidateAndThrowAsync <T>(
            this IValidatorAsync validator, IValidationRuleSet <T> ruleSet, T instance, ValidationContext context)
        {
            var result = validator.ValidateAsync(ruleSet, instance, context);

            return(ThrowIfIsNotValid(result));
        }
Esempio n. 5
0
        /// <inheritdoc />
        public ValidationResult Validate <T>(IValidationRuleSet <T> ruleSet, T instance, ValidationContext context)
        {
            if (ruleSet == null)
            {
                throw new ArgumentNullException(nameof(ruleSet));
            }

            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            return(ValidateInternal(ruleSet, instance, context));
        }
Esempio n. 6
0
        private static ValidationResult ValidateInternal <T>(IValidationRuleSet <T> ruleSet, T instance, ValidationContext context)
        {
            var validationMap = new Dictionary <RuleIdentity, ValidationResult>();
            var result        = new ValidationResult();
            var chain         = ruleSet.GetValidationChain();

            try
            {
                foreach (var validationChainMember in chain.Where(validationChainMember =>
                                                                  CheckDependsOnMembers(chain, instance, validationChainMember, validationMap,
                                                                                        result, context)))
                {
                    ProcessRule(instance, validationChainMember, validationMap, result, context);
                }
            }
            catch (ValidationStoppedException e)
            {
                result.MergeResult(e.Result);
            }
            return(result);
        }
        public BlockValidator(ILogger <BlockValidator> logger,
                              IConsensusParameters consensusParameters,
                              IChainState chainState,
                              IValidationRuleSet <IBlockValidationRule> blockValidationRules,
                              IBlockValidationContextFactory blockValidationContextFactory,
                              IPeriodicWork validationLoop,
                              IEventBus eventBus)
        {
            _logger                        = logger;
            _validationLoop                = validationLoop;
            _chainState                    = chainState;
            _blockValidationRules          = blockValidationRules;
            _blockValidationContextFactory = blockValidationContextFactory;
            _eventBus                      = eventBus;

            _blocksToValidate = Channel.CreateUnbounded <BlockToValidate>(new UnboundedChannelOptions {
                SingleReader = true, SingleWriter = false
            });
            _genesisHash = consensusParameters.GenesisHeader.Hash !;

            _validationLoop.Configure(false, this);
        }
Esempio n. 8
0
 /// <summary>
 /// Валидирует заданный объект набором правил валидации
 /// </summary>
 /// <typeparam name="T">Тип объекта для валидации</typeparam>
 /// <param name="ruleSet">Набор правил валидации</param>
 /// <param name="instance">Ссылка на объект валидации</param>
 /// <param name="context">Контекст валидации</param>
 /// <returns>Результат валидации</returns>
 public static ValidationResult Validate <T>(IValidationRuleSet <T> ruleSet, T instance, ValidationContext context = null)
 {
     return(validator.Validate(ruleSet, instance, context));
 }
Esempio n. 9
0
 /// <summary>
 /// Валидирует заданный объект набором правил валидации
 /// </summary>
 /// <typeparam name="T">Тип объекта для валидации</typeparam>
 /// <param name="ruleSet">Набор правил валидации</param>
 /// <param name="instance">Ссылка на объект валидации</param>
 /// <param name="context">Контекст валидации</param>
 /// <returns>Результат валидации</returns>
 public static Task <ValidationResult> ValidateAsync <T>(IValidationRuleSet <T> ruleSet, T instance, ValidationContext context = null)
 {
     return(validator.ValidateAsync(ruleSet, instance, context));
 }
Esempio n. 10
0
 public ValidatableBase(IValidationRuleSet rules)
 {
     _rules = rules;
 }