我有一个关于这个东西究竟是如何工作的问题。
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 被设置之后,无论何时发生异常,它总是具有与以前相同的值。
请问,当我在else if条件中设置_pvtMsg = "a";时,下次出错时_pvtMsg还是有值 "a"?
在我的应用程序的整个生命周期中是否只有一个 handler 实例可用,因此会发生这种情况?还是有其他原因?任何引用文件将不胜感激。
顺便说一句:此处理程序使用 WebApiConfig 的 Register 方法注册。
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());
请您参考如下方法:
你的假设是正确的。由于您注册了 GlobalExceptionHandler 的 Instance(使用 new 关键字)_pvrMsg 将始终具有前一个值(成功)调用。
如果 _pvrMsg 对您计划在 if block 中执行的任何操作至关重要,我建议锁定这部分代码以确保 处理 不会一次执行多次。
最简单的方法是:
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";
}
}
}
