我对这件事的确切运作方式有疑问。
public class GlobalExceptionHandler: ExceptionHandler
{
private string _pvtMsg;
public override void handle(ExceptionHandlerContext context)
{
//few if else conditions
if()
{
}
else if
{
_pvtMsg = "some value";
}
context.Result="Some random value depending upon if else execution";
}
}
现在,在此之后设置_pvtMsg
时,每当发生异常时,它始终具有与之前相同的值。
当我在_pvtMsg = "a";
条件中设置else if
时,下次发生错误时_pvtMsg
仍有值"a"
吗?
在我的应用程序的整个生命周期中是否只有一个handler
实例可用,因此会发生这种情况?还是有其他原因吗?任何参考文件将不胜感激。
顺便说一句:此处理程序已使用Register
的{{1}}方法注册。
WebApiConfig
答案 0 :(得分:3)
你的假设是正确的。由于您注册GlobalExceptionHandler
的实例(使用new
关键字)_pvrMsg
将始终具有上一次(成功)调用的值。
如果_pvrMsg
对您计划在if
块中执行的操作至关重要,我建议您锁定此部分代码,以确保handle
不执行多个一次一次。
最简单的方法是:
public class GlobalExceptionHandler: ExceptionHandler
{
private string _pvtMsg;
private readonly object _lock = new object();
public override void handle(ExceptionHandlerContext context)
{
lock(_lock)
{
//few if else conditions
if()
{
}
else if
{
_pvtMsg = "some value";
}
context.Result="Some random value depending upon if else execution";
}
}
}