使用FluentValidation为多个属性创建验证规则

时间:2012-10-25 13:54:07

标签: fluentvalidation

我正在尝试在FluentValidation中实现复杂的验证方案。

我们说我有一个汽车课。它有四个属性:Color,Make,Model,Year。

我想构建一个涉及其中三个属性的验证规则。为了对话,我们说我想要一个如下的验证规则:

if car.make = nissan and car.year = 2010 then
    if car.color <> green then
       throw a validation error since the system does not support 2010 nissans that are not green.
    end     
end 

我知道这是一个愚蠢的例子。但是,我的应用程序中的验证规则涉及我的对象的多个方面。这是我质疑的核心。

我试图遵循http://fluentvalidation.codeplex.com/wikipage?title=Custom关于使用&#34;使用AbstractValidator.Custom&#34;的指导。 。

有没有人有其他工作的AbstractValidator.Custom工作示例?

提前感谢您的时间。

1 个答案:

答案 0 :(得分:2)

以下是实现涉及多个属性的验证的简单方法

public class CarValidator : AbstractValidator<Car>
{
    public CarValidator()
    {
        RuleFor(c => c.Color).NotEqual("Green").When(MakeIsNisssanAndYearIs2000))
    }

    private bool MakeIsNisssanAndYearIs2000(Car arg)
    {
        return arg.Make == "Nissan" && arg.Year == 2000;
    }
}

public class Car
{
    public string Color { get; set; }

    public string Make { get; set; }

    public int Year { get; set; }
}

您可以参数化MakeIsNissanAndYearIs2000方法,以便将make和model作为参数传递给方法。但是这应该让您了解如何实现涉及多个属性的验证