Я использую ILSpy для изучения класса LogAttribute. Но я не могу понять, как это работает?
Насколько я понимаю, есть два способа создать аспект:
1) Высокоуровневые: OnMethodBoundaryAspect, OnExceptionAspect, MethodInterceptionAspect, LocationInterceptionAspect, EventInterceptionAspect.
2) Низкоуровневый: MethodLevelAspect с атрибутами On***Advice.
Но LogAttribute не использует ни первый, ни второй случай. LogAttribute расширяет MethodLevelAspect, но не содержит советов. Итак, как это работает?





Два подхода к созданию аспекта, описанные в вопросе, поддерживаются и задокументированы. Однако на более низком уровне PostSharp SDK сопоставляет интерфейс, реализованный аспектным классом, с классом Weaver. Затем выбранный ткач обрабатывает преобразование IL целевого элемента кода.
Базовые классы для аспектов (например, OnMethodBoundaryAspect) и советов (например, OnMethodEntryAdvice) обеспечивают более удобную реализацию общих аспектов. Вариант использования создания настраиваемого ткацкого модуля аспектов с нуля в настоящее время не поддерживается конечными пользователями, начиная с PostSharp 6.1.