我有一个类,我的验证看起来像这样:
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作为参数。
有解决方法吗?
答案 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);