Castle Dynamic Proxy не перехватывает вызовы методов при вызове изнутри класса

Я столкнулся с некоторым (что я думаю) странным поведением при использовании динамического прокси Castle.

Со следующим кодом:

class Program
{
    static void Main(string[] args)
    {
        var c = new InterceptedClass();
        var i = new Interceptor();

        var cp = new ProxyGenerator().CreateClassProxyWithTarget(c, i);

        cp.Method1();
        cp.Method2();

        Console.ReadLine();
    }
}

public class Interceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        Console.WriteLine(string.Format("Intercepted call to: " + invocation.Method.Name));

        invocation.Proceed();
    }
}

public class InterceptedClass
{
    public virtual void Method1()
    {
        Console.WriteLine("Called Method 1");
        Method2();
    }

    public virtual void Method2()
    {
        Console.WriteLine("Called Method 2");
    }
}

Я ожидал получить результат:

  • Перехваченный вызов: Метод 1
  • Вызывается Метод 1
  • Перехваченный вызов: Метод 2
  • Вызывается Метод 2
  • Перехваченный вызов: Метод 2
  • Вызывается Метод 2

Однако я получил следующее:

  • Перехваченный вызов: Метод 1
  • Вызываемый метод 1
  • Вызываемый метод 2
  • Перехваченный вызов: Метод 2
  • Вызывается Метод 2

Насколько я могу судить, динамический прокси-сервер может выполнять прокси-вызовы методов только в том случае, если вызов поступает извне самого класса, поскольку Method2 был перехвачен при вызове из Программы, но не из InterceptedClass.

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

Спасибо

14
задан George Goodchild 9 July 2011 в 09:23
поделиться