使用Agatha框架(BusinessExceptionType)进行异常处理

本文关键字:异常处理 BusinessExceptionType Agatha 框架 使用 | 更新日期: 2023-09-27 18:03:40

我正在使用带有自定义异常的Agatha框架。我有一个例外,MyException,当我配置请求时,我将其指定为BusinessExceptionType:

new ServiceLayerConfiguration(Assembly.GetExecutingAssembly(), typeof(SomeRequestResponse.MakeARequest).Assembly, typeof(Container)) { BusinessExceptionType = typeof(MyException) }.Initialize();

我是这样抛出这个异常的:

throw new MyException(message);
然而,当抛出异常时,MyException不会被识别为BusinessExceptionType。我如何让它被识别为BusinessExceptionType ?下面的条件不成立
if (response.ExceptionType == ExceptionType.Business)

下面是异常类:

public class MyException : Exception
{
    public MyException()
    {
    }
    public MyException(string message) : base(message)
    {
    }
    public MyException(string message, Exception inner) : base(message, inner)
    {
    }
    protected MyException(SerializationInfo info, StreamingContext context) : base(info, context)
    {
    }
}

更新:似乎BusinessExceptionTypeserviceLayerConfiguration中正确设置,直到我在BusinessExceptionType成为null时发出第一个请求。在配置请求和发出第一个请求之间的某个地方,它变成了null。要么是这样,要么是在RequestProcessor.cs中抓取不同的serviceLayerConfiguration

使用Agatha框架(BusinessExceptionType)进行异常处理

我发现在抛出异常之前必须在响应中设置异常类型。

return new SomeRequestResponse.MakeAResponse() { Exception = new Exception(ex), ExceptionType = ExceptionType.Business };

那么在你的消费者中,这句话将为真:

if (response.ExceptionType == ExceptionType.Business)

如果你想创建自己的异常,也可以这样做:

return new MakeARequestResponse.MakeAResponse()
{
    Exception = new ExceptionInfo(new Exception("Whatever you want to say.")),
    ExceptionType = ExceptionType.Business
};