Как запустить наши аспекты в PostSharp 2.0 - PullRequest
2 голосов
/ 11 апреля 2011

Мы находимся в процессе внедрения PostSharp в одном из наших проектов. Пока все отлично работает! Но есть одна вещь, которую нам не удалось решить: как дать совет условно.

Подробнее: - у нас есть атрибут StopWatchAttribute, который позволяет записывать время, необходимое для запуска методов - этот атрибут принимает перечисление "LoggingLevel", которое устанавливается в файле конфигурации со значениями, такими как 0, 1, 2 и т. д. - этот параметр читается в базовом классе BaseService во время выполнения: new BaseService (). CurrentLoggingSettings - мы попытались настроить конструктор атрибута, например StopWatchAttribute (new BaseService (). CurrentLoggingLevel), но получили ошибку компиляции: аргумент атрибута должен быть выражением константы, выражением typeof или выражением создания массива типа параметра атрибута.

-> резюме: мы бы хотели, чтобы совет вызывался условно, а условие зависит от параметра в конструкторе атрибута.

Возможно ли это сделать?

Спасибо за вашу помощь, Андраш

1 Ответ

4 голосов
/ 11 апреля 2011

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

Или вы можете извлечь значение из конфигурации из вашего метода рекомендации (OnMethodStart и т. Д.), Чтобы вы могли изменить его в конфигурации во время выполнения. Это более «гибкий» способ сделать это, поскольку он ничего не кодирует жестко.

Помните, что ваши переменные установлены во время выполнения. PostSharp - это фреймворк после компиляции, то есть он работает задолго до того, как ваши переменные станут известны JIT.

...