Tôi có lớp sauGọi ruleset và Common Rules FluentValidation
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());
});
}
và những gì tôi đang cố gắng làm là gọi xác nhận với rulset nhưng tôi cũng muốn quay trở lại các quy tắc "chung" khi tôi gọi xác nhận hợp lệ với RuleSet.
Bộ luật tôi đã cho gọi xác nhận như sau
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>();
}
}
tôi có thể gọi phương pháp CallValidation
với thành viên ruleSet
nhưng nó không được gọi các quy tắc "chung" cũng có.
Tôi biết tôi có thể tạo một "Quy tắc" phổ biến để chạy các quy tắc này nhưng trong trường hợp đó tôi sẽ phải gọi xác nhận bằng Common RuleSet luôn.
Có cách nào tôi có thể gọi cho RuleSet và cũng gọi các quy tắc chung.
Tùy chọn này dường như không tồn tại trong mã nguồn git kể từ ít nhất năm 2009, đó là điều khiến tôi ở đây vì tài liệu không chính xác. – john
Lời khuyên tuyệt vời! Trong FluentValidation 6.2.1, trường hợp đối số RuleSet là khác nhau: "ruleSet:" thay vì "Ruleset:". Ví dụ: validator.Validate (obj, ruleSet: "default, Insert"); –