Вводить совет для рекурсивного метода в Spring.Net? - PullRequest
3 голосов
/ 26 января 2009

Я пытаюсь использовать поддержку Spring.NET для AOP для внедрения зависимостей / инверсии управления / аспектно-ориентированного программирования (извините за множество умных слов - возможно, я опубликую отдельный вопрос, прося кого-то прояснить разницу :)).

В частности, я хочу перехватить рекурсивный вызов метода, чтобы при каждом вызове метода вызывался совет / перехватчик AOP.

Spring.Net не перехватывает ничего, кроме самого первого вызова метода. Я думаю , что Spring.Net поддерживает ровно 1 цепочку перехватчиков на экземпляр и не вызывает больше перехватчиков, пока не завершится вызов первого метода.

Есть ли у кого-нибудь информация о том, как вызвать перехватчик (совет) для запуска КАЖДОГО вызова метода, включая рекурсивные вызовы?

Я могу предоставить вывод кода / примера, если это полезно. Спасибо!

Ответы [ 3 ]

4 голосов
/ 26 января 2009
2 голосов
/ 26 января 2009

Если вы используете AOP на основе прокси, то это не будет работать для рекурсивных вызовов методов. Первый вызов против цели будет перехвачен прокси, и ваш совет будет выполнен. Затем будет вызван метод для цели, и последующие вызовы останутся в целевом классе, не зная прокси. Единственный способ заставить эту работу - фактически изменить ваш байт-код так, чтобы сам класс содержал поведение.

На самом деле я не работал с Spring.NET (только Spring с Java), поэтому я, к сожалению, не знаю, какие варианты байт-кода существуют в юниверсе .NET.

0 голосов
/ 09 июня 2009

Я знаю, что это не Spring.NET как таковой, но взгляните на PostSharp . Это дает вам время компиляции, которое не зависит от динамических прокси и будет обрабатывать рекурсивный вызов метода. Конфигурация немного отличается, хотя ...

...