Я использую Entity Framework. Ниже приведен пример метода списка для контекста Actors в моем классе ActorsDao. Если вы представите, что мое приложение похоже на imdb, будут методы CRUD для других контекстов, таких как фильмы, режиссеры, жанры, обзоры, студии и т. Д.
Независимо от метода или контекста, я обрабатываю ошибки одинаково. Из-за моих многочисленных методов во многих контекстах мой раздел catch всегда одинаков.
Очевидно, я мог бы создать класс обработки ошибок, поместить туда код и просто вызвать метод этого класса из блока catch.
Однако мне интересно, есть ли способ опустить TRY ... CATCH в каждом методе и настроить глобальный обработчик ошибок для методов в слое моей структуры сущностей?
Я бы хотел, чтобы этот глобальный обработчик ошибок обрабатывал эти ошибки, а не ошибки остальной части приложения.
Кажется, я помню, что в Java Spring вы могли аннотировать класс или метод именем метода, и все ошибки передавались бы без необходимости TRY ... CATCH. Мне интересно, есть ли что-то подобное для .NET (или сторонней библиотеки с такой функциональностью)?
public List<Actor> ListActors()
{
List<Actor> actorList = new List<Actor>();
using (var context = new ActorContext())
{
try
{
actorList = context.Actors.ToList<Actor>();
}
catch (Exception e)
{
//Handle error code
}
}
return actorList;
}
EDIT
Я провел еще какое-то исследование и нашел этот код здесь https://stackoverflow.com/a/4851985/1753877
private void GlobalTryCatch(Action action)
{
try
{
action.Invoke();
}
catch (ExpectedException1 e)
{
throw MyCustomException("Something bad happened", e);
}
catch (ExpectedException2 e)
{
throw MyCustomException("Something really bad happened", e);
}
}
public void DoSomething()
{
GlobalTryCatch(() =>
{
// Method code goes here
});
}
Будет ли использование такого делегата в порядке? Это, безусловно, отвечает моим требованиям.