Несколько аспектов в одном методе

В моем приложении я раньше использовал обычные атрибуты C # для «аннотирования» метода. Например: [


[Foo(SomeKey="A", SomeValue="3")]
[Foo(SomeKey="B", SomeValue="4")]
public void TheMethod()
{
   SpecialAttributeLogicHere();
}


] Что делает SpecialAttributeLogicHere (), так это рефлексивный взгляд на все атрибуты Foo, аннотирующие этот конкретный метод. Затем он (сам по себе) создал бы свой собственный словарь для всех ключей и значений.

Теперь я пытаюсь перейти к PostSharp, потому что SpecialAttributeLogic может быть помещен в аспект (и удален из тела метода, который намного чище!) внутри OnEntry. Foo будет заменен аспектом, расширяющим OnMethodBoundaryAspect.

Я все равно хотел бы использовать его следующим образом:


[Foo(SomeKey="A", SomeValue="3")]
[Foo(SomeKey="B", SomeValue="4")]

Но если Foo имеет OnEntry, это означает, что «SpecialAttributeLogic» будет выполняться дважды. Мне в основном нужно «собрать» все ключи и значения из каждого Foo () в словарь, к которому я затем применил некоторую логику.

Как это сделать (или передовой опыт) с PostSharp? Спасибо!

8
задан Torbjørn Kristoffersen 23 August 2011 в 15:02
поделиться