针对于通常的三层架构 我们需要针对于异常做一些处理,从上面的异常处理组件图当中,我们能看到自定义异常和异常处理层层上抛,具体我们还是来看代码吧!
自定义异常:
/// <summary>
/// 自定义BLL层异常类
/// </summary>
[Serializable]
public class BLLException : Exception, ISerializable
{
private string myBLLMsg;
/// <summary>
/// 自定义本地文本信息属性
/// </summary>
public string MyBLLMsg
{
get
{
return myBLLMsg;
}
}
/// <summary>
/// 重写只读本地文本信息属性
/// </summary>
/// <remarks>
/// 在myExcuteMsg不存在的情况下,返回继承Base.Message,
/// 如果存在则返回 myExcuteMsg + base.Message
/// </remarks>
public override string Message
{
get
{
return myBLLMsg == null ? base.Message : myBLLMsg + base.Message;
}
}
/// <summary>
/// 实现基类的各公用构造函数
/// </summary>
public BLLException()
: base() { }
/// <summary>
/// 实现基类的各公用构造函数
/// </summary>
/// <param name="message">基类的异常消息</param>
public BLLException(string message)
: base(message) { }
/// <summary>
/// 实现基类的各公用构造函数
/// </summary>
/// <param name="messager">基类的异常消息</param>
/// <param name="innerException">导致当前异常的异常</param>
public BLLException(string messager, Exception innerException)
: base(messager, innerException) { }
/// <summary>
/// 实现自定义消息公用构造函数
/// </summary>
/// <param name="message">基类的异常消息</param>
/// <param name="myExcuteMsg">自定义异常信息</param>
public BLLException(string message, string myExcuteMsg)
: base(message)
{
this.myBLLMsg = myExcuteMsg;
}
/// <summary>
/// 实现自定义消息公用构造函数
/// </summary>
/// <param name="messager">基类的异常消息</param>
/// <param name="myExcuteMsg">自定义异常信息</param>
/// <param name="innerException">导致当前异常的异常。</param>
public BLLException(string messager, string myExcuteMsg, Exception innerException)
: base(messager, innerException)
{
this.myBLLMsg = myExcuteMsg;
}
protected BLLException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
myBLLMsg = info.GetString("MydelMsg");
}
/// <summary>
/// 重写GetObjectData方法,实现向SerializationInfo中添加自定义字段信息。
/// </summary>
/// <param name="info"></param>
/// <param name="context"></param>
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("MydelMsg", myBLLMsg);
base.GetObjectData(info, context);
}
}