Мне нужно добавить локализацию к исключениям, создаваемым моим приложением, поскольку многие из них являются ApplicationExceptions и обрабатываются и регистрируются в отчете об ошибках. В идеале я хочу создать новое исключение, наследуя от 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 () в качестве первой строки Сообщение доступно только для чтения
Есть ли у кого-нибудь рекомендации относительно того, как получить локализованные строки в обработчике исключений? Мне это понадобится в нескольких разных исключениях, хотя я мог бы пойти по пути функции создания исключения, которая получает локализованную строку и создает исключение, хотя в этом случае информация о стеке будет неправильной. Я также не хочу слишком многого в основном тексте перед Throw, поскольку это, очевидно, начинает влиять на читаемость потока.





Вот пример того, чем я занимаюсь. 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); }
}
}
}
Посмотри на это:
http://visualstudiomagazine.com/features/article.aspx?editorialsid=2562
Мне не нужно заниматься локализацией, но это имеет смысл.