我有个问题想知道这东西到底是怎么工作的。
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的WebApiConfig方法注册的。
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler()); 发布于 2016-05-18 09:43:53
你的假设是正确的。由于您注册了一个实例,所以 of 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";
}
}
}https://stackoverflow.com/questions/37295650
复制相似问题