FluentValidation неявная дочерняя проверка с использованием ручной проверки - PullRequest
1 голос
/ 26 февраля 2020

Чтение документации кажется, что в. NET Ядро вы можете выполнять неявную проверку дочерних свойств с помощью:

services.AddMvc().AddFluentValidation(fv => {
    fv.ImplicitlyValidateChildProperties = true;
});

К сожалению, я не работаю с MVC напрямую поэтому я должен позвонить Validate сам (IValidator<T> экземпляры регистрируются мной лично в Scrutor). Есть ли аналогичные настройки для ручной проверки (с использованием. NET Core DI)?

1 Ответ

0 голосов
/ 26 февраля 2020

Если я вас правильно понял, это должно дать вам представление о том, что вы можете расширить его, добавив более сложные правила проверки.

public class Model
{
    public string Id { get; set; }
}

public class ModelValidator : AbstractValidator<Model>
{
    public ModelValidator()
    {
        RuleFor(x => x.Id).NotEmpty();
    }
}

public interface IService
{
    void Run(Model model);
}

public class Service : IService
{
    private readonly IValidator<Model> _validator;

    public Service(IValidator<Model> validator)
    {
        _validator = validator;
    }

    public void Run(Model model)
    {
        if (!_validator.Validate(model).IsValid)
            throw new ArgumentException(nameof(model));

        Console.WriteLine(model.Id);
    }
}

public static void Main(string[] args)
{
    var serviceProvider = new ServiceCollection()
        .AddSingleton<IService, Service>()
        .AddSingleton<IValidator<Model>, ModelValidator>()
        .BuildServiceProvider();

    var service = serviceProvider.GetService<IService>();
    service.Run(new Model { Id = "1"});
    service.Run(new Model { Id = "" });
}

Не забудьте добавить пакет FluentValidation.

...