You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为继承自具体类的类使用Fluent Validation编写验证器?

针对具体类继承场景的Fluent Validation实现方案

当子类继承自具体基类时,Fluent Validation不会自动包含基类的验证规则,需要手动通过以下两种方式复用基类的验证逻辑:

方式一:使用Include方法引入基类验证器

如果已编写好针对Base类的验证器,直接在子类验证器中通过Include方法引入即可:

基类验证器示例

public class BaseValidator : AbstractValidator<Base>
{
    public BaseValidator()
    {
        RuleFor(x => x.A).NotEmpty().WithMessage("A不能为空");
        RuleFor(x => x.B).Length(2, 10).WithMessage("B长度需在2-10之间");
    }
}

子类验证器实现

public class NewValidator : AbstractValidator<New>
{
    public NewValidator()
    {
        // 引入基类的所有验证规则
        Include(new BaseValidator());

        // 添加子类自身属性的验证规则
        RuleFor(x => x.C).EmailAddress().WithMessage("C必须是有效的邮箱地址");
        RuleFor(x => x.D).NotEmpty().WithMessage("D不能为空");
    }
}

这种方式优势在于灵活,无需修改原有基类验证器结构,适合基类验证器仅针对Base类的场景。

方式二:基于泛型基类验证器实现继承

如果需要在多个子类验证器中复用基类规则,可将基类验证器定义为泛型类型,让子类验证器直接继承:

泛型基类验证器示例

public class BaseValidator<T> : AbstractValidator<T> where T : Base
{
    public BaseValidator()
    {
        RuleFor(x => x.A).NotEmpty().WithMessage("A不能为空");
        RuleFor(x => x.B).Length(2, 10).WithMessage("B长度需在2-10之间");
    }
}

子类验证器实现

public class NewValidator : BaseValidator<New>
{
    public NewValidator()
    {
        // 直接添加子类自身属性的验证规则即可,基类规则已自动继承
        RuleFor(x => x.C).EmailAddress().WithMessage("C必须是有效的邮箱地址");
        RuleFor(x => x.D).NotEmpty().WithMessage("D不能为空");
    }
}

这种方式更简洁,适合需要频繁复用基类验证逻辑的场景。


内容的提问来源于stack exchange,提问作者Vaibhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:39:59