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.
Обзор библиотеки FluentValidation. Часть 2. Коллекции