Pull to refresh

Comments 4

настоящий воин никогда не бросает начатое ?

Если коллекция содержит объекты разных типов (вообще говоря с разной валидацией) то как быть?

В таком случае лучше искать ответ не в библиотеке, а попробовать переписать код. Но вообще, на крайний случай, можно попробовать так, если известно какие типы туда могут залететь:

public class Order { ... }
public class OrderValidator : AbstractValidator<Order> { ... }
public class Address { ... }
public class AddressValidator : AbstractValidator<Address> { ... }

// Модель клиента
public class Customer
{
  // Объекты разных типов
  public List<object>? Objects { get; set; }
}

// Валидатор для модели клиента
public class CustomerValidator : AbstractValidator<Customer>
{
  public CustomerValidator()
  {
    RuleFor(customer => customer.Objects.OfType<Address>().ToList())
      .ForEach(address =>
      {
        address.SetValidator(new AddressValidator());
      })
      .OverridePropertyName(nameof(Customer.Objects));

    RuleFor(customer => customer.Objects.OfType<Order>().ToList())
      .ForEach(order =>
      {
        order.SetValidator(new OrderValidator());
      })
      .OverridePropertyName(nameof(Customer.Objects));
  }
}

Кто-то возможно знает, что есть методы Transform, TransformForEach для преобразований, но в 12 версии они будут удалены, здесь в коде использован один из двух доступных способов (RuleFor + OverridePropertyName). https://github.com/FluentValidation/FluentValidation/issues/2072

Sign up to leave a comment.

Articles