FluentValidation呼叫规则集和通用规则 [英] FluentValidation Call RuleSet and Common Rules
问题描述
我有下面的类
public class ValidProjectHeader : AbstractValidator<Projects.ProjectHeader>
{
public ValidProjectHeader()
{
RuleFor(x => x.LobId).Must(ValidateLOBIDExists);
RuleFor(x => x.CreatedByUserId).NotEmpty();
RuleFor(x => x.ProjectManagerId).NotEmpty();
RuleFor(x => x.ProjectName).NotEmpty();
RuleFor(x => x.SalesRepId).NotEmpty();
RuleFor(x => x.DeliveryDate).NotEmpty();
RuleFor(x => x.ProjectStatusId).NotEmpty();
RuleFor(x => x.DeptartmentId).NotEmpty();
RuleFor(x => x.CustomerId).NotEmpty();
RuleSet("Insert", () =>
{
RuleFor(x => x.ProjectLines).Must(ValidateProjectLines).SetCollectionValidator(new ValidProjectLine());
});
RuleSet("Update", () =>
{
RuleFor(x => x.ProjectLines).SetCollectionValidator(new ValidProjectLine());
});
}
和我所试图做的是调用验证与rulset但我也希望我的呼唤与规则集验证返回常用的规则。
and what i am trying to do is call the validation with the rulset but i also want to return the "common" rules when i call the validation with the RuleSet.
我的代码有调用验证如下:
the Code I have for calling the validation is as follows
public abstract class BaseValidator
{
private List<ValidationFailure> _errors;
public bool IsValid { get; protected set; }
public List<ValidationFailure> Errors
{
get { return _errors; }
protected set { _errors = value; }
}
public virtual bool CallValidation()
{
Errors = new List<ValidationFailure>();
ValidatorAttribute val = this.GetType().GetCustomAttributes(typeof(ValidatorAttribute), true)[0] as ValidatorAttribute;
IValidator validator = Activator.CreateInstance(val.ValidatorType) as IValidator;
FluentValidation.Results.ValidationResult result = validator.Validate(this);
IsValid = result.IsValid;
Errors = result.Errors.ToList();
return result.IsValid;
}
public virtual bool CallValidation(string ruleSet)
{
Errors = new List<ValidationFailure>();
ValidatorAttribute val = this.GetType().GetCustomAttributes(typeof(ValidatorAttribute), true)[0] as ValidatorAttribute;
IValidator validator = Activator.CreateInstance(val.ValidatorType) as IValidator;
FluentValidation.Results.ValidationResult result = validator.Validate(new FluentValidation.ValidationContext(this, new PropertyChain(), new RulesetValidatorSelector(ruleSet)));
IsValid = result.IsValid;
Errors = result.Errors.ToList();
return result.IsValid;
}
public BaseValidator()
{
Errors = new List<ValidationFailure>();
}
}
我可以调用的方法 CallValidation
的成员规则集
,但他并没有叫常用规则也。
I can call the Method CallValidation
with the member ruleSet
but it is not calling the "common" rules also.
我知道我可以创建一个通用规则集运行这些规则,但在这种情况下,我将不得不调用验证与始终公共规则集。
I know I can create a "Common" RuleSet for running these rules but in that case i would have to call the validation with the Common RuleSet always.
有什么办法,我可以调用规则集,也叫共同规则。
Is there any way I can call the RuleSet and also call the common rules.
推荐答案
我发现通过添加第二个 validator.Validate
到 CallValidation(字符串规则集)$做到这一点的一种方式C $ C>方法是如下:
I have found one way to do it by adding a second validator.Validate
to the CallValidation(string ruleSet)
method it is as follows
public virtual bool CallValidation(string ruleSet)
{
Errors = new List<ValidationFailure>();
ValidatorAttribute val = this.GetType().GetCustomAttributes(typeof(ValidatorAttribute), true)[0] as ValidatorAttribute;
IValidator validator = Activator.CreateInstance(val.ValidatorType) as IValidator;
FluentValidation.Results.ValidationResult result = validator.Validate(new FluentValidation.ValidationContext(this, new PropertyChain(), new RulesetValidatorSelector(ruleSet)));
FluentValidation.Results.ValidationResult resultCommon = validator.Validate(this);
IsValid = (result.IsValid && resultCommon.IsValid);
Errors = result.Errors.Union(resultCommon.Errors).ToList();
return IsValid;
}
这篇关于FluentValidation呼叫规则集和通用规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!