2015-11-05 3 views
4

Например, у меня есть лицо ValidatorFluentValidation: Можно ли добавить Ruleset при вызове валидатора с помощью ValidateAndThrow

public class PersonValidator : AbstractValidator<Person> { 

    public PersonValidator() { 

     RuleSet("Names",() => { 
     RuleFor(x => x.Surname).NotNull(); 
     RuleFor(x => x.Forename).NotNull(); 
}); 

RuleFor(x => x.Id).NotEqual(0); 
} 
} 

Как я могу указать Ruleset при вызове валидатора с помощью ValidateAndThrow

, как правило, это то, что делается во время вызова ValidateAndThrow

public class ActionClass 
{ 
    private readonly IValidator<Person> _validator; 
    public ActionClass(IValidator<Person> validator) 
    { 
    _validator=validator 
    } 

    public void ValidateForExample(Person model) 
    { 
    _validator.ValidateAndThrow(model) 

    //When there is no error I can continue with my operations 
    } 
} 

Я понимаю, что Ruleset может быть передан в качестве параметра при caling Подтвердить

Я хотел бы знать, можно ли это сделать, используя ValidateAndThrow?

ответ

2

Глядя на source:

public static void ValidateAndThrow<T>(this IValidator<T> validator, T instance) 
{ 
    var result = validator.Validate(instance); 

    if(! result.IsValid) 
    { 
     throw new ValidationException(result.Errors); 
    } 
} 

Это не позволяет использовать ее по умолчанию, но ничего не мешает вам создать свой собственный маленький метод расширения, который также принимает в набор правил имя, например, так:

public static class ValidationExtensions 
{ 
    public static void ValidateAndThrow<T>(this IValidator<T> validator, T instance, string ruleSet) 
    { 
     var result = validator.Validate(instance, ruleSet: ruleSet); 

     if (!result.IsValid) 
     { 
      throw new ValidationException(result.Errors); 
     } 
    } 
}