Kow*_*Tom 12 .net c# vb.net error-handling .net-4.0
问题:
我想从类中的任何方法中捕获任何异常,以便我可以将特定于类的数据记录到异常中,以便在它向上传递到堆栈之前进行记录.我知道我可以在类的每个方法中放置一个try-catch,但是有很多方法,似乎应该有一个更有效的方法.
我目前在做什么的例子:
public class ClassA
{
    private int x;
    private int y;
    public void Method1()
    {
        try
        {
           //Some code
        }
        catch(Exception ex)
        {
            ex.Data.Add("x", x);
            ex.Data.Add("y", y);
            throw;
        }
    }
    public void Method2()
    {
        try
        {
            //Some code
        }
        catch (Exception ex)
        {
            ex.Data.Add("x", x);
            ex.Data.Add("y", y);
            throw;
        }
    }
}
我想做的例子:
public class ClassB : IUnhandledErrorHandler
{
    private int x;
    private int y;
    public void Method1()
    {
        //Some code
    }
    public void Method2()
    {
        //Some code
    }
    void IUnhandledErrorHandler.OnError(Exception ex)
    {
        ex.Data.Add("x", x);
        ex.Data.Add("y", y);
        throw;
    }
}
public interface IUnhandledErrorHandler
{
    void OnError(Exception ex);
}
注意: 此类是WCF项目中的服务,并实现ServiceContract.我已经尝试将ErrorHandler添加到服务的ChannelDispatcher中.但是,当错误到达ErrorHandler时,它已经超出了发生错误的类的范围,因此我无法访问类详细信息.
解:
public class ClassC
{
    public ClassC()
    {
        AppDomain.CurrentDomain.FirstChanceException += OnError;
    }
    private int x;
    private int y;
    public void Method1()
    {
        //Some code
    }
    public void Method2()
    {
        //Some code
    }
    private void OnError(object sender, System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs e)
    {
        e.Exception.Data["x"] = x;
        e.Exception.Data["y"] = y;
    }
}
| 归档时间: | 
 | 
| 查看次数: | 2453 次 | 
| 最近记录: |