Как передать объекты в конструктора атрибута

Вот немного отличающийся подход, если Вы так не интересуетесь программированием его, но более интересующиеся результатами: считайте здание им с помощью API Google Custom Search Engine .

Преимущества:

  • Google делает весь тяжелый подъем для Вас
  • , Знакомый UI и поведение для Ваших пользователей
  • Могут иметь что-то и работающий в минутах
  • Партии возможностей настройки

Недостатки:

  • Вы не пишете код, таким образом, никакая возможность изучения там
  • Все, что Вы хотите искать, должно быть общедоступным & в индексе Google уже
  • Ваш результат связывается с Google

55
задан Mike Nakis 29 May 2013 в 03:23
поделиться

2 ответа

Значения атрибутов ограничены простыми типами; например, базовые константы (включая строки) и typeof ... вы не можете использовать new или другой более сложный код. Коротко; ты не можешь этого сделать. Вы можете присвоить ему тип :

[PropertyValidation(typeof(NullOrEmptyValidatorScheme)]

т.е. ctor PropertyValidation принимает тип и использовать Activator.CreateInstance внутри код для создания объекта. Обратите внимание, что в идеале вы должны просто сохранить строку внутри ( AssemblyQualifiedName ).

Из ECMA 334v4:

§24.1.3 Типы параметров атрибутов

Типы позиционных и именованных параметры для класса атрибута ограничен параметром атрибута типы , а именно:

  • Один из следующих типов: bool , byte , char , double , float , int , long , short , string .
  • ] Тип , объект .
  • Тип System.Type .
  • Тип перечисления, если он имеет общедоступный доступ и типы, в которые он вложен (если есть) также общедоступны.
  • Одномерные массивы указанных выше типы.

и

§24.2 Спецификация атрибутов

...

Выражение E является атрибут-аргумент-выражение, если все из следующих утверждений верны:

  • Тип E является атрибутом тип параметра (§24.1.3).
  • Во время компиляции значение E может быть разрешено одним из следующих:
    • Постоянное значение.
    • Тип-выражение (§14.5.11), определяющее неуниверсальное тип, замкнутый сконструированный тип (§25.5.2) или несвязанный универсальный тип (§25.5).
    • Одномерный массив атрибут-аргумент-выражения.
69
ответ дан 7 November 2019 в 07:24
поделиться

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

Тем не менее, вы, вероятно, можете создать решение, использующее typeofs ], так как можно использовать .

Например:

[PropertyValidation(typeof(NullOrEmptyValidatorScheme))]
public string Name { get; private set; }

Этот синтаксис совершенно допустим. Код, который считывает ваши атрибуты, вы должны получить тип валидатора, создать новый экземпляр валидатора (он даже может поддерживать кеш валидаторов с ключами для типов валикатора,

10
ответ дан 7 November 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: