我需要为我的应用程序抛出的异常添加本地化,因为很多是ApplicationExceptions并处理并记录到错误报告中。理想情况下,我想创建一个新的Exception,从ApplicationException中继承我可以传递资源键和参数,以便可以从资源信息构建异常消息。不幸的是(我认为)在异常中设置消息的唯一方法是在New()...
中我想要像:
public class LocalizedException
Inherits ApplicationException
public Sub New(ResourceKey as string, arg0 as Object)
MyBase.New()
' get the localized text'
Dim ResMan as New Global.System.Resources.ResourceManager("AppName.ExceptionResources", _
System.Reflection.Assembly.GetExecutingAssembly)
Dim LocalText as string = ResMan.GetString(ResourceKey)
Dim ErrorText as String = ""
Try
Dim ErrorText = String.Format(LocalText, arg0)
Catch
ErrorText = LocalText + arg0.ToString() ' in case String.Format fails'
End Try
' cannot now set the exception message!'
End Sub
End Class
但是我只能将MyBase.New()作为第一行 消息是ReadOnly
有没有人对如何将本地化字符串放入Exception处理程序提出任何建议?我将在几个不同的异常中需要它,虽然可以采用异常创建函数的方式获取本地化的字符串并创建异常,但堆栈信息将是错误的。我之前在主体中也不需要太多,因为它显然会开始影响流量的可读性。
答案 0 :(得分:2)
以下是我所做的一个示例。 EmillException继承自ApplicationException。
namespace eMill.Model.Exceptions
{
public sealed class AccountNotFoundException : EmillException
{
private readonly string _accountName;
public AccountNotFoundException(string accountName)
{
_accountName = accountName;
}
public override string Message
{
get { return string.Format(Resource.GetString("ErrAccountNotFoundFmt"), _accountName); }
}
}
}
答案 1 :(得分:0)