Как установить рекомендацию Spring.NET AOP перед вызовом метода

Я хочу перехватить вызов метода перед выполнением с помощью spring.NET. Предположим, что класс/метод для перехвата:

public class Listener
{
    public void Handle()
    {
        // method body
    }
}

Вот что я сделал (при условии, что весь код находится в пространстве имен с именем Example):

1.Создал совет:

public class MyAopAdvice : IMethodBeforeAdvice
{
    public void Before(MethodInfo method, object[] args, object target)
    {
        // Advice action
    }
}

2. Обновлены мои конфигурации spring xml:

  <object id="myAopAdvice" type="Example.MyAopAdvice" />

  <object id="listener" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="Target">
      <object type="Example.Listener" autowire="autodetect"/>
    </property>
    <property name="InterceptorNames">
      <list>
        <value>myAopAdvice</value>
      </list>
    </property>
  </object>

По какой-то причине мой код Advice не сработает, если я поставлю в него точку останова. Однако, если я добавлю некоторые операторы ведения журнала консоли в свой совет, кажется, что они регистрируются, но не в подходящее время (т. Е. Перед вызовом Listener.Handle()).

Я готов поспорить, что мои конфиги неверны (на этот раз мне может не хватать способа сказать конфигам прослушивать только вызов метода Handle, а не какой-либо другой метод, который может иметь Listener). Есть идеи, что не так?


person rtorres    schedule 20.09.2013    source источник


Ответы (1)


Объявите свой метод Handle виртуальным:

public virtual void Handle()  // ...

В вашем классе не реализованы какие-либо интерфейсы, которые используются в механизме aop по умолчанию Spring.net использует для создания прокси. Когда spring.net не находит никаких интерфейсов для прокси, он ищет виртуальные методы чтобы создать прокси для класса.

person Marijn    schedule 21.09.2013