2008-11-13 45 views
0

我需要将本地化添加到由我的应用程序抛出的异常中,因为ApplicationExceptions很多并且处理并记录到错误报告中。理想情况下,我想创建一个新的异常,从ApplicationException继承,我可以将资源键以及参数传递给,以便可以从资源信息构建异常消息。不幸的是(我认为)的一个例外设置邮件的唯一方式是在新的()...关于本地化异常的建议

我想是这样的:

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( )作为第一行 消息是只读

有没有人有任何关于如何获得本地化字符串到异常处理程序的建议?我将在几个不同的例外中需要这个,尽管可能会采用异常创建函数的方式来获取本地化的字符串并创建异常,尽管堆栈信息将会是错误的。在投掷之前,我也不想在主体中太多,因为它显然开始影响流的可读性。

回答

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); } 
     } 
    } 
}