Используйте Unity.Interception для очистки кода. С обработкой перехвата ваш код может выглядеть так:
int f()
{
// no need to try-catch any more, here or anywhere else...
int i = process();
return i;
}
Все, что вам нужно сделать на следующем шаге, это определить обработчик перехвата, который вы можете настроить для обработки исключений. Используя этот обработчик, вы можете обрабатывать все исключения, возникающие в вашем приложении. Плюс в том, что вам больше не нужно размечать весь код с помощью блоков try-catch.
public class MyCallHandler : ICallHandler, IDisposable
{
public IMethodReturn Invoke(IMethodInvocation input,
GetNextHandlerDelegate getNext)
{
// call the method
var methodReturn = getNext().Invoke(input, getNext);
// check if an exception was raised.
if (methodReturn.Exception != null)
{
// take the original exception and raise a new (correct) one...
CreateSpecificFault(methodReturn.Exception);
// set the original exception to null to avoid throwing yet another
// exception
methodReturn.Exception = null;
}
// complete the invoke...
return methodReturn;
}
}
Регистрация класса в обработчике может быть сделана через файл конфигурации или программно. Код довольно прост. После регистрации вы создаете экземпляры своих объектов, используя Unity, например:
var objectToUse = myUnityContainer.Resolve<MyObjectToUse>();
Подробнее о Unity.Interception:
http://msdn.microsoft.com/en-us/library/ff646991.aspx