如何创建基础 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());
即可自动包含通用规则,而无需继承通用基类型。
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());
即可自动包含通用规则,而无需继承通用基类型。