private async Task InvokeProactiveRulesAsync(IRuleAsync <T> asyncRule)
 {
     if (_rxRuleService.GetProactiveRules().ContainsKey(asyncRule.GetType()))
     {
         await ExecuteAsyncRules(_rxRuleService.GetProactiveRules()[asyncRule.GetType()]);
     }
 }
 private async Task InvokeNestedRulesAsync(bool invokeNestedRules, IRuleAsync <T> rule)
 {
     if (invokeNestedRules && rule.IsNested)
     {
         await ExecuteAsyncRules(_rxRuleService.FilterRxRules(rule.GetRules().OfType <IRuleAsync <T> >().ToList()));
     }
 }
Exemplo n.º 3
0
 private async Task InvokeReactiveRulesAsync(IRuleAsync <T> asyncRule)
 {
     if (_activeRuleService.GetReactiveRules().ContainsKey(asyncRule.GetType()))
     {
         await ExecuteAsyncRules(_activeRuleService.GetReactiveRules()[asyncRule.GetType()].OfType <IRuleAsync <T> >());
     }
 }
        private async Task InvokeExceptionRulesAsync(IRuleAsync <T> asyncRule)
        {
            var exceptionRules =
                _rxRuleService.GetExceptionRules()[asyncRule.GetType()]
                .Select(rule =>
            {
                rule.UnhandledException = asyncRule.UnhandledException;
                return(rule);
            }).ToList();

            await ExecuteAsyncRules(exceptionRules);
        }
        private static async Task <IRuleResult> ExecuteRuleAsync(IRuleAsync <T> rule)
        {
            await rule.BeforeInvokeAsync();

            if (rule.IsParallel && rule.ParallelConfiguration.CancellationTokenSource != null &&
                rule.ParallelConfiguration.CancellationTokenSource.Token.IsCancellationRequested)
            {
                return(null);
            }

            var ruleResult = await rule.InvokeAsync();

            await rule.AfterInvokeAsync();

            ruleResult.AssignRuleName(rule.GetType().Name);

            return(ruleResult);
        }
Exemplo n.º 6
0
        private void InitializerAsync(IList <object> rules,
                                      ConcurrentBag <Task> initBag, IRuleAsync <T> nestingRule = null)
        {
            for (var i = 0; i < rules.Count; i++)
            {
                var rule = ResolveRule <IRuleAsync <T> >(rules[i]);

                rules[i] = rule;

                InitializeRule(rule, nestingRule);

                initBag.Add(rule.InitializeAsync());

                if (rule.IsNested)
                {
                    InitializerAsync(rule.GetRules(), initBag, rule);
                }
            }
        }
Exemplo n.º 7
0
 /// <summary>
 ///   Задает валидатор, проверяющий свойство правилом валидации.
 ///   Подходит для валидации вложенных свойств
 /// </summary>
 /// <typeparam name="T">Тип объекта валидации</typeparam>
 /// <typeparam name="TProperty">Тип свойства</typeparam>
 /// <param name="obj">Строитель цепи валидаторов правила с текучим интерфейсом</param>
 /// <param name="rule">Правило валидации</param>
 /// <returns>Контейнер со ссылкой на последний валидатор в цепи</returns>
 public static CurrentValidatorHolder <T, TProperty> UseRuleAsync <T, TProperty>(
     this RuleValidationMemberBuilder <T, TProperty> obj, IRuleAsync <TProperty> rule)
 {
     return(obj.SetValidator(new UseIRulePropertyValidatorAsync <TProperty>(rule)));
 }
 public UseIRulePropertyValidatorAsync(IRuleAsync <T> rule)
 {
     _rule = rule ?? throw new ArgumentNullException(nameof(rule));
 }