Я сделал простое тестирование библиотеки Castle Dynamic Proxy:
public class Printer
{
public virtual void Write(string msg)
{
Console.Write(msg);
}
}
public class CastleDynamicProxy
{
public static void Test()
{
ProxyGenerator generator = new ProxyGenerator();
Printer logger = generator.CreateClassProxy<Printer>(new TestInterceptor());
logger.Write("Hello, World!");
}
}
Теперь в моем перехватчике я хочу определить время функции, но она вызывает StackOverflowException, потому что я вызываю целевой метод внутри метода Intercept, вызывая бесконечный цикл:
public class TestInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
var accessor = invocation.Proxy as IProxyTargetAccessor;
MethodInfo target = accessor.DynProxyGetTarget().GetType().GetMethod("Write");
var s = Stopwatch.StartNew();
target.Invoke(invocation.InvocationTarget, invocation.Arguments);
s.Stop();
}
}
Есть ли что-нибудь вокруг этого: либо 1) полностью остановить процесс перехвата, либо 2) удалить мой перехватчик после того, как я использовал его для того, что мне нужно, перед тем как попасть в бесконечный цикл?