Я пытаюсь отфильтровать аргументы для использования в валидаторе коллекции, используя FluentValidations:
У меня есть общий класс для коллекций, который выглядит следующим образом:
public class ItemCollection<TEntity>
{
public ItemCollection(TEntity[] items);
public TEntity[] Items { get; }
}
У меня есть Validator для моей ItemCollection, который выглядит так:
public FooCollectionValidator: AbstractValidator<ItemCollection<Foo>>
{
public FooCollectionValidator(IDictionary<string, FooMetadata> allowedMetadata)
{
//Setting Rules using Must works fine
this.RuleForEach(x => x.Items).Must(x => allowedMetadata.ContainsKey(x.Key));
}
}
Мне нужно установить валидатор для каждого элемента, но я бы хотел отфильтровать свои метаданные для дочернего валидатора. Независимо от того, каким образом я пытаюсь, у меня нет доступа к элементам, чтобы иметь возможность фильтровать:
this.RuleForEach(x => x.Items).SetValidator(x =>
{
//I want to filter the metadata by the Key and pass it to the child validator
var metadata = allowedMetadata[x.Key];
return new FooDTOValidator(metadata )
});
Это не работает, потому что X всегда относится к коллекции, а не к отдельному элементу. Как я могу отфильтровать аргументы, переданные в валидатор коллекции?