Это невозможно без изменения кода или внесения изменений в сам аспект.
Причина в том, что PostSharp преобразует код метода.Он добавляет вызовы аспекта в тело метода BaseClass.Dispose и в тело метода SubClass.Dispose
.Поскольку BaseClass.Dispose
вызывает SubClass.Dispose
, аспект будет выполняться для обоих.
Чтобы отключить аспект, когда BaseClass.Dispose
вызывается из SubClass.Dispose
, необходимо передать информацию о вызывающем абоненте в базуметод.Без изменения кода (который нарушил бы цель аспекта), это возможно, изменив аспект для использования AsyncLocal
или [ThreadStatic]
для передачи состояния между экземплярами аспекта.