2008-11-13 2 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); } 
     } 
    } 
} 
Смежные вопросы