Какой класс .NET Framework использует для извлечения информации аннотаций данных из класса? - PullRequest
1 голос
/ 08 февраля 2012

У меня есть ситуация, в которой мне нужно извлечь информацию аннотаций данных из ASP.NET ViewModel для выполнения более продвинутых проверок.

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

Несмотря на то, что аннотации данных не привязаны к ASP.NET MVC, если есть какая-то конкретная реализация ASP.NET MVC, для меня это не будет проблемой.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

Аннотации данных - это просто обычные атрибуты, и к ним можно получить доступ, используя обычные механизмы отражения атрибутов.

См. Accessing Custom Attributes в MSDN и Глава 18 программированияC #.

1 голос
/ 08 февраля 2012

Пространство имен System.ComponentModel.DataAnnotations содержит класс Validator , который используется для проверки объекта или свойства объекта, который оформлен с помощью ValidationAttributes.

Я думаю, что этот класс используется большинством частей (ASP.NET MVC, службами WCF RIA и т. Д.) Платформы, которые полагаются на логику валидации.

Если вы хотите расширить основные функции проверки, вы можете написать свои ValidationAttribute s и позволить Validator проверять ваши объекты.

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

Как я и подозревал, ASP.NET MVC создал помощник для класса с именем ModelMetadata для извлечения метаинформации из модели с учетом атрибутов аннотации данных. Смотрите пример:

        [HttpPost]
        public ActionResult Create(AppointmentViewModel formModel)
        {
            var metaInfo = ModelMetadata.FromLambdaExpression<AppointmentViewModel, DateTime>(model => model.Date, null);
            var dateIsRequired = metaInfo.IsRequired;

            // do some logic here..

            return this.Edit(formModel);
        }

Это уменьшает необходимость ручного чтения атрибутов аннотации данных для основных сценариев.

...