图三-4

  ExManagement包

  包含了ExManager类和ErrorInfo类,是框架中核心的业务流程控制模块。如图三-5

  图三-5

  ErrorInfo类:根据ErrorId查询对应的ErrorString。在这个类里,会根据在配置文件中节的值去指定的数据源(XML文件或者数据库)查询。

  ExManager类,该类是一个单例类,会在第一次实例化时获取配置信息实体对象,并按照配置文件把所有指定的异常处理类实例化后并存入一个哈希表中。以后实例化该类都会重复使用之前实例化的该对象,避免反射造成的性能影响。通过调用该类的ProcessException()方法将捕捉到的异常对象,错误编号,用来处理异常的异常处理器名(建议为该层的名称)传递给框架,并按照参数从哈希表中取出对应的异常处理对象,调用接口对异常进行处理。

  ExManagement.Handler包

  只包含一个默认的异常处理器类:DefaultExHandler,它从ExHandlerBase基类继承。下面是该类里重要的ProcessExeception方法。

public override string ProcessExeception(Exception ex, string strUserId, string strErrorCode)

{

// 记录异常信息

LogEx(ex, strUserId, strErrorCode);

 

switch(m_ExHandlerConfig.ReturnMode)

{

// 返回类型为错误编码

case ExManagement.ExReturnMode.ErrorCode:

{

return strErrorCode;

}

// 返回类型为详细错误信息(友好提示)

case ExManagement.ExReturnMode.ErrorString:

{

return ExManagement.ExManager.GetErrorInfoByCode(strErrorCode);

}

// 返回类型为详细异常信息(Exception.Message)

case ExManagement.ExReturnMode.ExceptionString:

{

return ex.Message;

}

// 将异常向上抛出

case ExManagement.ExReturnMode.Exception:

{

// 如果是该层自身引发的异常则包装后抛出

if(ex.GetBaseException() == ex)

{

throw new Exception(string.Format("{0}层发生异常:{1},{2}",

m_ExHandlerConfig.Name, strErrorCode, ex.Message), ex);

}

// 若是捕捉到的是包装后的异常(即上层抛出的)

else

{

throw ex;

}

}

default:

{

return null;

}

}

}