1

我正在尝试在 FluentValidation 中实现一个复杂的验证场景。

假设我有一个汽车课。它有四个属性:颜色、品牌、型号、年份。

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

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关于使用 "Using AbstractValidator.Custom" 的指导。

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

在此先感谢您的时间。

4

1 回答 1

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方法,以便将品牌和型号作为参数传递给方法。但这应该让您了解如何实现涉及多个属性的验证

于 2012-11-09T09:21:04.937 回答