public async Task <TResult> Handle(TQuery query, IDictionary <string, object> arguments = null, CancellationToken cancellationToken = default) { if (_validators.Any()) { _log.Debug("Validating query {queryType}", query.GetType()); foreach (var validator in _validators) { _log.Verbose("Validating query {queryType} with {validatorType}", query.GetType(), validator.GetType()); await validator.ValidateAndThrowAsync(query, null, cancellationToken); } _log.Verbose("Validation of query {queryType} succeeded", query.GetType()); } else { _log.Debug("No validator found for query {queryType}", query.GetType()); } _log.Verbose("Handling {queryType} with {handlerType} ({handlerId})", typeof(TQuery), _queryHandler.GetType(), _queryHandler.GetHashCode()); return(await _queryHandler.Handle(query, arguments, cancellationToken)); }