如何创建基础 FluentValidation

How to create a base FluentValidation

namespace Test
{

    public class A
    {
        public string Name { get; set; }
    }    
    public class AValidator : AbstractValidator<A>
    {
        public AValidator()
        {
            RuleFor(t => t.Name)
                .NotEmpty()
                .MinimumLength(10)
                .MaximumLength(20);
        }
    }

    public class B
    {
        public string Name { get; set; }
    }    
    public class BValidator : AbstractValidator<B>
    {
        public BValidator()
        {
            RuleFor(t => t.Name)
                .NotEmpty()
                .MinimumLength(10)
                .MaximumLength(20);
        }
    }
}

试图创建一个像这样的公共区域:

namespace Test2
{
    public interface IPerson
    {
        public string Name { get; set; }
    }

    public abstract class CommonABValidators<T> : 
                           AbstractValidator<T> where T : IPerson
    {
        protected CommonABValidators()
        {
            RuleFor(x => x.Name).NotNull();
        }
    }
}

但通过调用

public class AValidator : CommonABValidators<A>

它应该可以转换为 IPerson,但在我的情况下,我在 A 中有不同的道具不能转换为 IPerson

知道如何将通用参数提取到通用验证器中吗?

你所做的看起来是正确的。只需确保您的 class A 实现了 IPerson 接口,验证器就会开始工作。

您至少可以尝试的另一个选择是 Include rules。在这里你可以找到官方文档:https://docs.fluentvalidation.net/en/latest/including-rules.html

您只需调用 Include(new CommonValidator()); 即可自动包含通用规则,而无需继承通用基类型。