C# collectionValidator的Fluent验证筛选器参数

C# collectionValidator的Fluent验证筛选器参数,c#,fluentvalidation,C#,Fluentvalidation,我正在尝试使用FluentValidations筛选要在集合验证程序中使用的参数: 我有一个用于集合的泛型类,它看起来像: public class ItemCollection<TEntity> { public ItemCollection(TEntity[] items); public TEntity[] Items { get; } } 这不起作用,因为X总是指集合而不是单个项目。如何筛选传递给集合验证器的参数?我摸索了一下,似乎无法使用SetValida

我正在尝试使用FluentValidations筛选要在集合验证程序中使用的参数:

我有一个用于集合的泛型类,它看起来像:

public class ItemCollection<TEntity>
{
    public ItemCollection(TEntity[] items);
    public TEntity[] Items { get; }
}

这不起作用,因为X总是指集合而不是单个项目。如何筛选传递给集合验证器的参数?

我摸索了一下,似乎无法使用
SetValidator
SetCollectionValidator
建议已被或将被弃用。 我能想到的唯一办法是:

this.RuleForEach(x => x.Items).Must(x =>
  {
      var validator = new FooDTOValidator(allowedMetadata[x.Key]);
      return validator.Validate(x).IsValid;
  });
编辑 如评论中所述,我们发布了错误消息。也许有机会保护它们。将此视为未测试,但根据测试结果,我们可以获取根上下文数据并添加失败(如果有)

this.RuleForEach(x => x.Items).Custom((x, context) =>
{
    var validator = new FooDTOValidator(allowedMetadata[x.Key]);
    var result = validator.Validate(x);
    if (!result.IsValid)
    {
        foreach (var failure in result.Errors)
        {
            context.AddFailure(failure);
        }
    }
});

我摸索了一下,似乎无法使用
SetValidator
SetCollectionValidator
建议已被或将被弃用。 我能想到的唯一办法是:

this.RuleForEach(x => x.Items).Must(x =>
  {
      var validator = new FooDTOValidator(allowedMetadata[x.Key]);
      return validator.Validate(x).IsValid;
  });
编辑 如评论中所述,我们发布了错误消息。也许有机会保护它们。将此视为未测试,但根据测试结果,我们可以获取根上下文数据并添加失败(如果有)

this.RuleForEach(x => x.Items).Custom((x, context) =>
{
    var validator = new FooDTOValidator(allowedMetadata[x.Key]);
    var result = validator.Validate(x);
    if (!result.IsValid)
    {
        foreach (var failure in result.Errors)
        {
            context.AddFailure(failure);
        }
    }
});

您是否尝试过此.RuleFor(x=>x.Items).SetCollectionValidator(…)?您是否尝试过此.RuleFor(x=>x.Items).SetCollectionValidator(…)?如果我只是想扔掉验证消息,我不会为适配器创建开销。但我最终坚持了每个人的原则,所以我给你check@johnny5你说得对。我们丢失了错误信息。也许编辑中的代码值得一试。我还没有测试过它,我很好奇这是否有效。如果我只是想扔掉验证消息,我不会为适配器创建开销。但我最终坚持了每个人的原则,所以我给你check@johnny5你说得对。我们丢失了错误信息。也许编辑中的代码值得一试。我还没有测试过它,我很好奇这是否有效。