现在有很多 Fluent 实现可以与 Lambda 一起做非常简洁的事情。我想把我的大脑包裹在它周围,这样我就可以开始创造一些这样的东西,但我还没有找到我的大脑理解的解释。
考虑这个简单的人员验证器示例
public class PersonValidator : IValidator<Person>
{
public PersonValidator()
{
AddRule(p => p.FirstName).CannotBeNull().CannotBeBlank();
AddRule(p => p.LastName).CannotBeNull().CannotBeBlank();
}
public List<ValidationResult> Validate(Person p)
{
// pseudo...
apply all rules specified in constructor, return results
}
}
我已经设法在我的验证器上使用这样的方法来完成所有这些工作......
public ValidationResult<T,TProp> AddRule<T,TProp>(Func<T,TProp> property)
{
... not sure what to do here. This method gives me the ability to use the lambda
... for specifying which properties i want to validate
}
然后,我可以创建扩展方法来扩展 IValidator 以实现CannotBeNull 和CannotBeEmpty。
所以似乎我有问题的前半部分和后半部分,但我不确定如何将它们组合在一起。
寻找一个有意义的解释......我想“得到它”。:)