В моих классах обслуживания я создаю экземпляр исключения, подобный этому:
protected ServiceException _ex;
protected void Initialize()
{
_ex = new ServiceException();
}
Позже в этих классах я вызываю это исключение, если что-то идет не так:
public void Delete<T, V>(T item, V repo)
where T : Microsoft.WindowsAzure.StorageClient.TableServiceEntity
where V : IAzureTable<T>
{
try
{
repo.Delete(item);
}
catch (Exception ex)
{
_ex.Errors.Add("", "Error when deleting " + typeof(T).Name.ToLower());
throw _ex;
}
}
Вне этого вконтроллер, который я проверяю для исключения:
catch (Exception e) { log(e); }
Затем я обрабатываю это:
protected void log(Exception ex)
{
if (ex is ServiceException)
{
ModelState.Merge(((ServiceException)ex).Errors);
}
else
{
Trace.Write(ex);
ModelState.AddModelError("", "Database access error: " + ex.Message);
}
}
Извините за длинный пример, но я хотел бы знать, является ли это действительной вещьюдля меня, чтобы делать.В частности, кто-то заметил, что я создаю новое значение _ex каждый раз, даже если нет исключений.Моя причина была в том, что каждый контроллер имеет около двадцати блоков try-catch, и я подумал, что лучше просто создать объект _ex в начале, и поэтому мне не нужно иметь двадцать областей, где я создаю новый _ex, если что-то пойдет не так.Буду признателен, если кто-нибудь скажет мне, имеет ли это смысл.Спасибо.