我正在尝试使用 Ninject.Extensions.Interception.DynamixProxy 创建一个拦截器来记录方法完成时间。
在单线程环境中,这样的工作:
public class TimingInterceptor : SimpleInterceptor
{
readonly Stopwatch _stopwatch = new Stopwatch();
private bool _isStarted;
protected override void BeforeInvoke(IInvocation invocation)
{
_stopwatch.Restart();
if (_isStarted) throw new Exception("resetting stopwatch for another invocation => false results");
_isStarted = true;
invocation.Proceed();
}
protected override void AfterInvoke(IInvocation invocation)
{
Debug.WriteLine(_stopwatch.Elapsed);
_isStarted = false;
}
}
然而,在多线程场景中,这将不起作用,因为 StopWatch 在调用之间共享。如何将 StopWatch 的实例从 BeforeInvoke 传递给 AfterInvoke,这样它就不会在调用之间共享?