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())); } }
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); }
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); } } }
/// <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)); }