Для моего приложения (ASP.NET MVC 3.0 RTM, Razor View Engine) я хотел бы использовать DataAnnotations для своих моделей. Если я сохраню классы модели в веб-проекте, у меня могут быть ресурсы resx в App_GlobalResources или App_LocalResources без встраивания .resx
в .resources
файлы.
Игнорирование недавно появившихся доменов приложений и другие соображения, это идеальный вариант, потому что изменение чего-то незначительного в локализованном ресурсе, например опечатка или неправильный перевод, не требует компиляции.
Однако после перемещения моих моделей в библиотеку классов я не вижу способа сохранить файлы .resx
в качестве выходных данных и по-прежнему использовать атрибуты DataAnnotations. Я что-то упустил?
Проблема заключается в том, как атрибуты находят ресурсы. Например, свойство «Имя» может выглядеть так:
[Display(Name = "MyEntity_Name", ResourceType = typeof(Validations))]
[Required(ErrorMessageResourceName="MyEntity_Name_Required",
ErrorMessageResourceType = typeof(Validations))]
[StringLength(150, MinimumLength = 2)]
public string Name { get; set; }
Это требование для строго типизированной оболочки ресурсов стало проклятием моего существования за последние 24 часа.
Я попытался обобщить обертку, но похоже, что атрибуты проверки специально ищут свойство обертки, называемое MyEntity_Name
для DisplayAttribute и MyEntity_Name_Required
для RequiredAttribute. Я не углубился в код DataAnnotations, чтобы увидеть, есть ли какая-то магия, которую я могу осуществить. Я надеялся, что кто-то еще столкнулся с этим и имел какие-либо идеи.
Вопрос
Можно ли использовать DataAnnotations ValidationAttributes (включая DisplayAttribute) в библиотеке классов без встраивания файлов resx в .resources
файлы?
Gotchas: (
В будущем я бы хотел перейти от ресурсов resx к базам данных с минимальными затратами на программирование. Я не могу сделать это сейчас из-за ограниченных ресурсов (без каламбура). Итак, я хочу избежать обхода ResourceProvider. Кроме того, я хочу избежать перезаписи или переноса всех атрибутов в пространстве имен System.ComponentModel.DataAnnotations.