Набор правил FluentValidation и общие правила
У меня есть следующий класс
public class ValidProjectHeader : AbstractValidator
{
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, но я также хочу вернуть "общий» правила, когда я вызываю проверку с RuleSet.
Код, который я имею для вызова проверки, выглядит следующим образом
public abstract class BaseValidator
{
private List _errors;
public bool IsValid { get; protected set; }
public List Errors
{
get { return _errors; }
protected set { _errors = value; }
}
public virtual bool CallValidation()
{
Errors = new List();
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();
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();
}
}
Я могу назвать методCallValidation
с участникомruleSet
но это не зоветобщий» правила тоже.
Я знаю, что могу создатьОбщие» RuleSet для запуска этих правил, но в этом случае мне придется всегда вызывать проверку с помощью Common RuleSet.
Есть ли способ, которым я могу вызвать RuleSet, а также вызвать общие правила.