public async Task Execute(ExecutionContext context, AsyncPipeline <ExecutionContext> .NextDelegate next) { var applicableValidators = validators.Where(v => v.CanValidateInstancesOfType(context.Request.GetType())); var validationContext = new ValidationContext(context.Request) { RootContextData = { [ExecutionContextKey] = context } }; var validationMessageBuilder = new StringBuilder(); var isInvalid = false; foreach (var validator in applicableValidators) { var validationResult = await validator.ValidateAsync(validationContext).ConfigureAwait(false); if (!validationResult.IsValid) { validationMessageBuilder.AppendLine(validationResult.ToString()); isInvalid = true; } } if (!isInvalid) { await next.Invoke().ConfigureAwait(false); } else { context.Errors.Add(ExecutionErrorType.ValidationFailed, validationMessageBuilder.ToString()); } }
public async Task <ExecutionResult> Execute( IExecutionRequest request, IReadOnlyDictionary <string, object> items, CancellationToken cancellationToken) { var logger = serviceProvider.ResolveRequired <ILogger>(); var context = new ExecutionContext(serviceProvider, logger, request, items, cancellationToken); await pipeline.Invoke(context).ConfigureAwait(false); return(new ExecutionResult(context.Response, context.Errors)); }
internal async Task Dispatch(ExecutionContext context, AsyncPipeline <ExecutionContext> .NextDelegate next) { foreach (var controller in controllers) { if (controller.CanExecute(context)) { await controller.Execute(context).ConfigureAwait(false); return; } } await next.Invoke().ConfigureAwait(false); }