2012-04-25 4 views
1

На данный момент я пишу свой собственный ValidationAttribute для моего приложения mvc.Передача enum/скомпилированное значение в качестве параметра для конструктора

У меня есть следующий ValidationAttribute код.

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Parameter, AllowMultiple = false)] 
public class RecordAttribute: ValidationAttribute 
{ 

    public UniqueDataRecordAttribute(string primaryKeyProperty) 
    { 

    } 
} 

Я передаю имя поля моего основного свойства как строку в свой атрибут и сделаю проверку. т.д .:

[RecordAttribute("CustomerID")] 
public class CustomerMetaData 
{ 


} 

Это работает для меня, но я буду столкнуться с проблемами, если имя первичного ключа изменится.

Я создал перечисление, которое содержит атрибут первичного ключа. Но когда я пытаюсь передать его компилятор говорит мне:

Аргумент атрибут должен быть константным выражением, TypeOf выражения или создания массива выражения типа параметра атрибута

Я также попытался это подход: Associating enums with strings in C#, но эффект тот же.

Есть ли какой-либо шанс передать enum (или другое скомпилированное значение) моему атрибуту?

Спасибо

+0

Почему бы имя изменения ключа первичной. Такого рода вещи вы исправляете, чтобы они не менялись ....? –

ответ

0

Вы пытаетесь сделать что-то подобное?

[RecordAttribute(Keys.CustomerID.ToString())] 
public class CustomerMetaData 
{ 
} 

Это не будет работать, потому что строка, возвращаемая Keys.CustomerID.ToString() не является постоянным.

Вместо enum вы могли бы использовать статический класс строковых полей const?

static class Keys { 
    public const string CustomerID = "CustomerID"; 
} 

Тогда это будет работать:

[RecordAttribute(Keys.CustomerID)] 
public class CustomerMetaData 
{ 
} 
Смежные вопросы