ErrorHandleClass:
该类是这个错误处理机制的核心,这是一个单例类。这个类创建了具体错误处理方式类的数组,并提供了HandleError方法,此方法对所有登记的错误处理方式进行轮询,达到根据用户的设置进行错误处理的目的。具体代码如下:
public class ErrorHandleClass
{
AbstractHandleClass[] _errHandleArray = new AbstractHandleClass [Global.ERROR_HANDLE_MODE];
private static ErrorHandleClass m_instance = null;
private ErrorHandleClass()
{
//
// TODO: Add constructor logic here
_errHandleArray[0] = new ErrHdlDebugInfoClass();//本文不给出这个类的实现
_errHandleArray[1] = new ErrHdlEventLogClass();
_errHandleArray[2] = new ErrHdlMessageBoxClass();//本文不给出这个类的实现
_errHandleArray[3] = new ErrHdlLogFileClass();//本文不给出这个类的实现
_errHandleArray[4] = new ErrHdlMailClass();
//
}
public static ErrorHandleClass GetSingleton()
{
if(m_instance == null)
{
m_instance = new ErrorHandleClass();
}
return m_instance;
}
public int HandleError(ErrorMsgClass emsg)
{
int result = 0;
for(int i=0;i<_errHandleArray.Length;i++)
{
int t = _errHandleArray[i].HandleError(emsg);
if(t == 9999)
{
continue;
}
else
{
result += t;
}
}
return result;
}
}
AbstractHandleClass:
该抽象类是所有错误处理方式的具体实现类的父类。每个具体的错误处理类重载该类的HandleError方法达到错误处理方式多样化的目的。该类的HandleFlag方法是轮询方式实现的核心,每个子类调用该方法来判断是否需处理这个错误信息。具体代码如下:
public abstract class AbstractHandleClass
{
protected AbstractMessageFormatClass fmt = new MessageFormatClassA();
public AbstractHandleClass ()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// Handle error message.
/// </summary>
public virtual int HandleError(ErrorMsgClass emsg)
{
return 0;
}
/// <summary>
/// A flag to decide handle the error or not.
/// </summary>
protected bool HandleFlag(ErrorMsgClass emsg, int id)
{
int iMode = (int)emsg.hash["Mode"];
string iCode = Global.NumberSplit(iMode);
string flag = "0";
if(iCode.Length>=id)
{
flag = iCode.Substring(iCode.Length-id,1);
}
if(flag.Equals("1"))
{
return true;
}
else
{
return false;
}
}
}
AbstractMessageFormatClass:
该类是定义错误信息输出格式的抽象类,子类继承该类并重载Format方法来重新定义输出格式。该类的Format方法是对错误信息输出格式的默认定义。具体代码如下:
public abstract class AbstractMessageFormatClass
{
public AbstractMessageFormatClass()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// Define the output format of error message.
/// </summary>
public virtual string Format(ErrorMsgClass emsg)
{
string msg = "";
char enter = (char)13;
msg += "------error message------" + enter.ToString();
msg += "Assembly Name: " + emsg.hash["Assembly"].ToString() + enter.ToString();
msg += "Class Name: " + emsg.hash["Class"].ToString() + enter.ToString();
msg += "Function Name: " + emsg.hash["Function"].ToString() + enter.ToString();
msg += "DateTime: " + emsg.hash["DateTime"].ToString() + enter.ToString();
msg += "Error Code: " + emsg.hash["ErrorCode"].ToString() + enter.ToString();
msg += "Error Message: " + emsg.hash["ErrorMessage"].ToString() + enter.ToString();
msg += "-------------------------" + enter.ToString();
return msg;
}
}
MessageFormatClassA:
该类用来重载Format方法,它继承AbstractMessageFormatClass类,对错误信息输出格式进行重新定义,用户也可自行创建MessageFormatClassB, MessageFormatClassC等类自由定义输出,只须继承AbstractMessageFormatClass类即可。具体代码如下:
public class MessageFormatClassA:AbstractMessageFormatClass
{
public MessageFormatClassA()
{
//
// TODO: Add constructor logic here
//
}
//以下为重载父类的Format方法,此处将其作为注释,不作使用
//public override string Format(ErrorMsgClass emsg)
//{
//
// return "";
//}
}
(未完待续)