У меня есть два отдельных типа:
public class Person
{
public string Name { get; set; }
public bool IsActive { get; set; }
public Contact ContactDetails { get; set; }
}
public class Contact
{
[RequiredIfActive]
public string Email { get; set; }
}
Что мне нужно, так это выполнить условную декларативную проверку поля внутренней модели на основе некоторого состояния поля родительской модели - в этом конкретном примере необходимо заполнить Email
, если включена опция IsActive
.
Я не хочу реорганизовывать таксономию этих моделей, но в то же время мне нужно использовать подход, основанный на атрибутах. Кажется, что изнутри атрибута нет доступа к контексту проверки родительской модели. Как добраться или ввести его туда?
public class RequiredIfActiveAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
/* validationContext.ObjectInstance gives access to the current
Contact type, but is there any way of accessing Person type? */
Изменить:
Я знаю, как можно реализовать условную проверку с помощью Fluent Validation, но я НЕ спрашиваю об этом (мне не нужна поддержка относительно Fluent Validation). Однако я хотел бы знать, существует ли какой-либо способ доступа к родительской модели изнутри System.ComponentModel.DataAnnotations.ValidationAttribute
.