Наконец, действие в аспекте PostSharp Exception - PullRequest
1 голос
/ 04 марта 2012

У меня следующая ситуация

private volatile bool _inProgress = false;

public void DoSomethingStart()
{
  if(_inProgress == false)
  {
      foo.BeginInvoke(null, null); // DoSomething
      _inProgress = true;
  }
}

[CatchAllExceptionsFromHere]
private void DoSomething()
{ }

Аспекты пока работают. Все исключения обрабатываются из CatchAllExceptionsFromHere. Но я хочу установить «_inProgress = false» в предложении finally аспекта - поэтому, если DoSomething завершил, «_inProgress» должно быть установлено в false. Так как атрибуты не могут взять любой объект - есть ли обходной путь?

Спасибо, Майкл

1 Ответ

2 голосов
/ 04 марта 2012

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

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

...