Пользовательский атрибут проверки с использованием Reflection? - PullRequest
0 голосов
/ 22 февраля 2012

Я хочу использовать сборку 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.
    }
}

Некоторая помощь здесь была бы признательна.

1 Ответ

0 голосов
/ 22 февраля 2012
...