Прежде чем я начну, я хотел бы уточнить, что мое текущее понимание терминологии АОП выглядит следующим образом ...
- Аспекты являются эквивалентом классов АОП для классов в ООП.
- Советы - это AOP-эквивалент методов в OOP.
- Pointcuts - это AOP-эквивалент использования кода в OOP.В ООП мы вызываем вещи.В АОП мы плетем вещи.Решение что соткать , где определяется Pointcuts.
По фактическому вопросу ...
У меня есть логированиеаспект в PostSharp, который я хочу использовать (ткать) на каждом методе, за исключением свойств.Первоначально я использовал следующее в моем аспекте:
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
Однако я обнаружил, что аспект все еще вплетается в свойства, что означает, что мне нужно было выполнить вторичную проверку во время выполнения, чтобы предотвратить выполнение моего кода в свойствах:
if (!methodName.StartsWith("set_") && !methodName.StartsWith("get_")) {
Это не идеально.Я должен быть в состоянии определить это поведение в моем pointcut, чтобы мне не нужно было выполнять какую-либо проверку во время выполнения.
Я искал атрибут MethodPointcut
, который, кажется, дает мне обратный вызов, чтобы помочьткач выбирает кандидатов на совет во время сборки. Пожалуйста, я могу посмотреть пример?
Предполагая, что это работает, я все еще думаю: «Почему я должен жестко кодировать Pointcuts для моих советов?».Аспекты и советы - определение / реализация.Pointcuts - это использование.Два должны быть разделены.