MicroElements.Swashbuckle.FluentValidation AddFluentValidationRules с использованием шаблона «Обработчик команд» - PullRequest
3 голосов
/ 07 января 2020

Попытка заставить MicroElements.Swashbuckle.FluentValidation работать с использованием шаблона «Обработчик команд» из https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/microservice-application-layer-implementation-web-api

Использование ASP. Net Core 2.2 MicroElements.Swashbuckle.FluentValidation v3 .0.0-alpha.1 (как сборка, а не ссылка на пакет) Swashbuckle.AspNetCore 5.0.0-rc2

У меня есть это Startup.cs

return services.AddSwaggerGen(setup =>
            {
                setup.AddFluentValidationRules();                
            });

с использованием беглой проверки

Это не извлекает проверки Fluent в схему для объекта тела запроса.

    public class AddModelsCommandValidator : AbstractValidator<AddModelsCommand>
    {
        public AddModelsCommandValidator()
        {
            //1. validate request
            RuleFor(e => e.Model).InvalidRequestValidation();

            When(x => x.Model != null, () =>
            {
                //2. validate request body
                RuleFor(e => e.Model.ModelCode).StringRequiredValidation();
                RuleFor(e => e.Model.ModelCode).StringMaxLengthValidation(5);
                RuleFor(e => e.Model.ProgramName).StringRequiredValidation();
                RuleFor(e => e.Model.ProgramName).StringMaxLengthValidation(50);
            });
        }
    }

    public class AddModelsCommand : IRequest<AddModelsCommandResult>
    {
        public Model Model { get; }

        public AddModelsCommand(Model model)
        {
            Model = model;
        }
    }

    public class Model
    {   
        /// <summary>
        /// Unique code of the Model
        /// </summary>
        public string ModelCode { get; set; }

        /// <summary>
        /// The name of the Program
        /// </summary>
        public string ProgramName { get; set; }
    }   

Следующий код делает извлечение проверок Fluent в схему для объекта тела запроса. (потому что 1. AbstractValidator находится в модели, а не в команде, и 2. Я удалил условную проверку When ())

public class AddModelsCommandValidator : AbstractValidator<Model>
    {
        public AddModelsCommandValidator()
        {

                //2. validate request body
                RuleFor(e => e.ModelCode).StringRequiredValidation();
                RuleFor(e => e.ModelCode).StringMaxLengthValidation(5);
                RuleFor(e => e.ProgramName).StringRequiredValidation();
                RuleFor(e => e.ProgramName).StringMaxLengthValidation(50);
        }
    }

Есть ли способ вызвать AddFluentValidationRules, а также использовать шаблон обработчика команд?

1 Ответ

2 голосов
/ 08 января 2020

Проблема здесь в том, что AbstractValidator<Model> имеет для использования .. AbstractValidator<Command> на самом деле не имеет смысла

...