2017-02-21 5 views
1

Так я создал класс какКак повторно использовать атрибут

public static class SharedDataAnnotations 
{ 
    /// <summary> 
    /// Matches letters, digits, dashes, underscores and spaces. 
    /// </summary> 
    public static RegularExpressionAttribute DisplayNameProperCharacters = 
     new RegularExpressionAttribute(@"^[A-Za-z0-9\-_ ]+$") { ErrorMessage = "Display name can only contain letters, numbers, underscores, dashes and spaces." }; 
} 

, потому что я хочу, чтобы иметь возможность повторно использовать

[RegularExpression("@"^[A-Za-z0-9\-_ ]+$"", ErrorMessage = "Display name can only contain letters, numbers, underscores, dashes and spaces.")] 

Однако, когда я пытаюсь поставить его на собственность как

[SharedDataAnnotations.DisplayNameProperCharacters] 

Я получаю сообщение об ошибке

'SharedDataAnnotations' не содержит определения для

ответ

0

Вы не можете. Сам объект атрибута должен быть новым экземпляром для каждого элемента кода, к которому он применяется.

Вы также не можете ссылаться на нелитеральное значение при построении настраиваемого атрибута. Поэтому вы не можете передать ссылку на свой объект DisplayNameProperCharacters на собственный конструктор атрибутов.

Что вы могли сделать, это иметь пользовательский атрибут принимать в качестве аргумента в конструктор некоторый идентификатор (например, строка, значение перечисления и т.д.), который определяет, какое поведение вы на самом деле хотите (например, посмотреть на конкретную RegexExpressionAttribute объект в соответствующее время).

0

Атрибуты 'DisplayNameProperCharacters' должен быть имяТипа. В зависимости от того, какие библиотеки выполняют чтение, вы можете украсить интерфейс или базовый класс. Вы также можете определить значение regex как постоянную строку для повторного использования.

Смежные вопросы