我使用了流畅的验证来验证这样的硬编码:
RuleFor(customer => customer.CreditLimit).GreaterThan(customer => customer.MinimumCreditLimit);
我想在代码中用某个(元)数据库驱动的值替换MinimumCreditLimit不会有问题。是否有人尝试过这种情况以及在这种情况下最佳做法是什么(除了MinimumCreditLimit可能源于某种策略设计模式的事实)。是否有人可能会使用表达式树来进行流畅的验证,以使其更加元化程序?
答案 0 :(得分:1)
嗯,最简单的方法是在验证类中添加一个ctor。
public class EntityValidator : AbstractValidator<Entity> {
public EntityValidator(int minimumCreditLimit) {
Rulefor(customer => customer.CreditLimit).GreaterThan(minimumCreditLimit);
}
}
现在您可以像这样使用它(如果您不使用“属性”方式)。
var minimumCreditLimit = <GetTheLimitFromDbWithAnyMethod>();
var validator = new EntityValidator(minimumCreditLimit);
<yourEntityInstance>.ValidateAndThrow(validator);
另一种(类似的)方式是通过某种方式将数据从db获取到验证器(例如在ctor中),并创建一个自定义验证器/扩展方法来使用它。