예제 #1
0
        public async Task <ICommandResponse> HandleAsync(TCommand command)
        {
            ICommandResponse retVal;

            if (IsValidatingCommand(command))
            {
                var originalLogInfo = command.ToLog();

                var templateArguments = new List <object> {
                    _commandValidator.GetType().Name
                };
                templateArguments.AddRange(originalLogInfo.LogMessageParameters);

                _logger.LogDebug(_logTemplate + originalLogInfo.LogMessageTemplate, templateArguments.ToArray(), _commandValidator.GetType().Name);

                var valResult = await _commandValidator.ValidateAsync(command);

                _logger.LogDebug("Validation {validationSuccess} for {CommandValidatorName:l}", valResult.IsValid, _commandValidator.GetType().Name);

                if (valResult.IsValid)
                {
                    retVal = await InnerCommandHandler.HandleAsync(command);
                }
                else
                {
                    _logger.LogInformation(_validationFailureTemplate, _commandValidator.GetType().Name, valResult.ValidationEntries.Select(e => e.ErrorMessage).ToArray());

                    retVal = new CommandResponse
                    {
                        Successful        = false,
                        ValidationEntries = valResult.ValidationEntries.ToList()
                    };
                }
            }
            else
            {
                retVal = await InnerCommandHandler.HandleAsync(command);
            }

            return(retVal);
        }
예제 #2
0
        public async Task <TResult> HandleAsync(TCommand command)
        {
            await _validator.ValidateAsync(command);

            return(await _decoratedHandler.HandleAsync(command));
        }