流畅的验证和必须自定义验证

时间:2014-11-05 12:58:21

标签: c# fluentvalidation

我有一个类,我的验证看起来像这样:

    public ValidationResult Validate(CustomerType customerType)
    {
        CustomerType Validator validator = new CustomerTypeValidator();
        validator.RuleFor(x => x.Number).Must(BeUniqueNumber);

        return validator.Validate(customerType);
    }

    public bool BeUniqueNumber(int number)
    {
        //var result = repository.Get(x => x.Number == customerType.Number)
        //                       .Where(x => x.Id != customerType.Id)
        //                       .FirstOrDefault();

        //return result == null;
        return true;
    }

CustomerTypeValidator是一个验证字符串属性的基本验证器类。

我还添加了一条新规则来检查数字在数据库中是否唯一。我在这个类中这样做,因为它有对存储库的引用。验证器类没有这样的引用。

这里的问题是BeUniqueNumber方法应该有一个CustomerType参数。但是当我这样做时,我在上面的RuleFor行上得到一个错误,因为'Must'需要一个int作为参数。

有解决方法吗?

1 个答案:

答案 0 :(得分:2)

你能试试吗?

public ValidationResult Validate(CustomerType customerType)
{
    CustomerTypeValidator validator = new CustomerTypeValidator();
    validator.RuleFor(x => x).Must(HaveUniqueNumber);

    return validator.Validate(customerType);
}

public bool HaveUniqueNumber(CustomerType customerType)
{
    var result = repository.Get(x => x.Number == customerType.Number)
        .Where(x => x.Id != customerType.Id)
        .FirstOrDefault();

    return result == null;
    //return true;
}

你也应该能够这样做:

public ValidationResult Validate(CustomerType customerType)
{
    CustomerTypeValidator validator = new CustomerTypeValidator();
    validator.RuleFor(x => x.Number).Must(BeUniqueNumber);

    return validator.Validate(customerType);
}

public bool BeUniqueNumber(CustomerType customerType, int number)
{
    var result = repository.Get(x => x.Number == number)
        .Where(x => x.Id != customerType.Id)
        .FirstOrDefault();

    return result == null;
    //return true;
}
  

“我还添加了一条新规则来检查数据库中的数字是否唯一。我这样做   它在这个类中因为有对存储库的引用。“

那么,为什么不能给验证者提供对存储库的引用呢?

CustomerTypeValidator validator = new CustomerTypeValidator(repository);