2016-09-03 2 views
2

С C# 6, используя ключевое слово nameof(), теперь можно создать безопасный атрибут Display, который использует локализацию. (смотри также DisplayName attribute from Resources?)Создайте собственный атрибут DisplayAttribute, который указывает ResourceType

Результат будет выглядеть примерно так:

[Display(NameRes = Localization.Account.MinPasswordLength), ResourceType = typeof(Localization.Account))] 
    public int MinPasswordLength { get; set; } 

Но, после того, как печатаю это десятки свойств, я получаю чувство должно быть проще. Каждый раз, когда я печатаю одну и ту же информацию дважды (почти).

Мой вопрос: Как создать пользовательский атрибут DisplayName, который передаст ResourceType из информации Name?

Затем код будет выглядеть примерно так:

[Display(NameResource = Localization.Account.MinPasswordLength)] 
    public int MinPasswordLength { get; set; } 

Любая идея, если это возможно? И если да: как?

+0

Если вы проверяете определение 'класса DisplayAttribute' вы заметите, что' sealed' означает, что вы не можете наследовать от него. Один из способов - создать свой пользовательский атрибут DisplayNameAttribute, который будет считывать информацию из файла ресурсов. –

+0

Да, класс запечатан. Это несчастливо, но возможно, это может быть сделано с расширением? – Frank

ответ

0

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

Вы помещаете этот атрибут в определение класса. И во время поиска ресурсов вы проверите хост типа, чтобы определить тип ресурсов.

Пример:

[DisplayResourceHost(typeof(Localization.Account))] 
public class ViewModel 
{ 
    [Display(NameResource = Localization.Account.MinPasswordLength)] 
    public int MinPasswordLength { get; set; } 
} 
Смежные вопросы