Подтвердить что ты не робот

Какова цель ValidationContext при реализации объекта IValidatableObject

Я несколько раз реализовал IValidatableObject и никогда не обнаружил, что цель синтаксического анализа ValidationContext метода Validate - моя типичная реализация IValidatableObject выглядит примерно так:

 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
 {
    if (Prop1 == Prop2)
    {
        yield return new ValidationResult(
              "Prop1 and Prop2 must be different.",
              new[] {"Prop1", "Prop2"});
    }
 }

Есть ли что-то, что я пропустил, что я мог бы использовать ValidationContext для?

EDIT: Я использую ASP.NET MVC, и это реализовано в классе, а не в контроллере.

4b9b3361

Ответ 1

ValidationContext содержит свойство IServiceProvider. Это точка расширения, чтобы передать контейнер DI вашим атрибутам проверки и проверять методы. Вы можете использовать его, например, для проверки базы данных без установки зависимости от dbcontext в вашей модели.

Ответ 2

Вы должны получить Prop1 и Prop2 из validationContext. Из вашего вопроса трудно сказать, используете ли вы WebForms (так что у вас есть привязка кодов со свойствами) или MVC (и если вы реализуете это в контроллере).

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
 {
    if (validationContext["Prop1"] == validationContext["Prop2"])
    {
        yield return new ValidationResult(
              "Prop1 and Prop2 must be different.",
              new[] {"Prop1", "Prop2"});
    }
 }