Какова цель 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, и это реализовано в классе, а не в контроллере.
Ответы
Ответ 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"});
}
}