使用 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