Подавить атрибут для одного метода во время компиляции? - PullRequest
0 голосов
/ 02 ноября 2010

Я использую PostSharp, и я хотел бы подавить (или изменить) существующий глобальный атрибут для одного метода в классе.

В приведенном ниже примере я хочу класс "thisIsLogged () "для регистрации, а класс" thisIsNotLogged () "не для регистрации.

Однако, это не работает: атрибут" [LogThis (false)] "просто добавляет в существующий атрибут уровня класса, и ведение журнала происходит в любом случае.Есть идеи?

[LogThis(true)] // uses PostSharp + SmartInspect to switch on logging for the entire class
class doSomething
{
  void thisIsLogged(int x)
  {
     // entry/exit from this class is automatically logged
  }
  [LogThis(false)] // aim: suppress logging for this method, if [LogThis(true)] is switched on for the entire class (however, this doesn't work as attributes are additive)
  void thisIsNotLogged(int x)
  {
     // I want to suppress the entry/exit logging for this class, to reduce log size
     // However, this *doesnt work*; logging occurs anyway
     // as attributes are additive - any ideas?
  }
}

Редактировать:

Использовано [LogThis (AttributeExclude = true)], это работало нормально (см. Решение ниже).

1 Ответ

1 голос
/ 02 ноября 2010

Подумайте об использовании MethodPointcut , поскольку Гаэль любезно предложил использовать его, когда у меня был похожий вопрос.Это дает вам большую гибкость при выборе методов, дополняющих аспекты, включая проверку атрибутов.

...