Почему перехватчик DynamicProxy не будет вызван для * каждого * вызова виртуального метода?

Пример объясняет это лучше всего:

public interface IA { 
  void foo();
  void bar();
}

public class A : IA {
  public virtual void foo(){
    Console.Write("foo");
    bar();                  //call virtual method
  }
  public virtual void bar(){
    Console.Write("bar");
  }
}

public class Interceptor : IInterceptor {
  public void Intercept(IInvocation invocation)
  {
    Console.WriteLine("Intercepted: " + invocation.Method.Name);
    invocation.Proceed();
  }
}

Main(){
  IA a = new A();

      //proxy-ing an interface, given an implementation
  IA proxy = new Castle.DynamicProxy.ProxyGenerator()
                 .CreateInterfaceProxyWithTarget(a, new Interceptor());
  proxy.foo();

}

Я бы ожидал выход:

Intercepted foo
foo
Intercepted bar
bar

Вместо этого я получаю:

Intercepted foo
foo
bar

Зачем?

Как работает динамический прокси? Я ожидал, что сгенерированный проксиунаследовать из класса прокси, однако, кажется, что он используетсостав делегировать каждый из методов в прокси-интерфейсе для фактической реализации.

мы пробовали с помощью Castle DynamicProxy, а также с более старой реализацией динамического прокси,Крамон

Ответы на вопрос(2)

Ваш ответ на вопрос