Немного позднего ответа, но мне все равно хотелось его дать:)
Вы можете использовать статический, универсальный вспомогательный класс для хранения и извлечения обработчиков строго типизированным, безопасным для типа способом:
public static class ExceptionHandlers<TEx>
where TEx : Exception
{
public static ExceptionHandler<TEx> Handle
{
get;
set;
}
}
Вы можете назначить обработчики в одном месте:
public static void MyExceptionHandler(MyException exception, out bool handled)
{
// Handling logic...
}
...
ExceptionHandlers<MyException>.Handle = MyExceptionHandler;
... и использовать их там, где вам нужно:
try
{
// Something...
}
catch(MyException myEx)
{
bool handled;
ExceptionHandlers<MyException>.Handle(myEx, out handled);
}
Один экземпляркаждый уникальный ExceptionHandler<TEx>
создается во время выполнения, так как используются различные типы TEx
, и при желании у вас есть обработчики без приведения:)
Было бы довольно легко расширить это решение для использованияколлекции обработчиков, если требуется.