【发布时间】:2011-09-30 16:27:16
【问题描述】:
我对 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) 在我将拦截器用于我需要的用途之后,然后在进入无限循环之前移除它?
【问题讨论】:
标签: c# reflection castle-windsor interceptor castle-dynamicproxy