Я столкнулся с некоторым (что я думаю) странным поведением при использовании динамического прокси 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");
}
}
Я ожидал получить результат:
Однако я получил следующее:
Насколько я могу судить, динамический прокси-сервер может выполнять прокси-вызовы методов только в том случае, если вызов поступает извне самого класса, поскольку Method2 был перехвачен при вызове из Программы, но не из InterceptedClass.
Я могу понять, что при выполнении вызовов из прокси-класса он больше не будет проходить через прокси, а просто хотел проверить, что это ожидалось, и если это так, то посмотреть, есть ли способ получить все вызовы перехватываются независимо от того, откуда они вызываются?
Спасибо