Почему перехватчик 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, а также с более старой реализацией динамического прокси,Крамон