Я хочу использовать сборку System.ComponentModel.DataAnnotations
для проверки аргументов (сопоставленных со свойствами) для консольного приложения, над которым я работаю. Я буду использовать шаблон метаданных "класс приятелей"; это работало хорошо для меня в прошлом.
Одна из вещей, которые мне нужно проверить, заключается в том, что предоставляется ровно один из двух типов аргументов. Другими словами, можно указать аргумент foo
или аргумент bar
, но не оба, и не ни того, ни другого.
С этой целью я начал писать собственный атрибут проверки, который казался довольно простым, но я немного растерялся, когда понял, что мне нужно выйти за пределы свойства контекста проверки и перейти к одноуровневому свойству объекта I Я проверяю (как CompareAttribute
). Кажется, это классический случай рефлексии, но я ломаю голову над тем, как поступить. Это то, что я до сих пор:
/// <summary>
/// This property, or the other specified, are required, but both cannot be set.
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public class XORAttribute : ValidationAttribute
{
/// <summary>
/// If validation should fail, return this error message.
/// </summary>
public string ErrorMessage { get; set; }
/// <summary>
/// The name of the other required property that is mutually exclusive of this one.
/// </summary>
public string OtherValueName { get; set; }
public XORAttribute(string otherValueName)
{
this.OtherValueName = otherValueName;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
//Something needs to go here.
}
}
Некоторая помощь здесь была бы признательна.