2014-02-22 73 views
4

我打電話使用委託(動態配置服務):Delegate.DynamicInvoke - 捕獲異常

public void CallService (Delegate service, IContext ctx) 
{ 
    var serviceArgs = CreateServiceArguments(service, ctx); 
    service.DynamicInvoke(serviceArgs); 
} 

在這一點上我想趕上那發生在調用的服務方法的所有異常,但是,我做的不想捕獲由於DynamicInvoke調用而發生的任何異常。例如:

  • service委託拋出DomainException - >捕獲異常
  • DynamicInvoke()拋出MemberAccessException因爲委託是一個私有方法 - >不捕獲異常,讓它泡了

希望我很清楚我在問什麼。如何確定捕獲的異常是來自DynamicInvoke調用本身還是來自底層代理。

哦是的,並且:我不能使用異常類型來決定!服務本身完全有可能拋出一個MemberAccessException,因爲它可以自己做一些代理東西...

回答

3

哦是的,和:我不能使用異常類型來決定!服務本身完全有可能拋出MemberAccessException,因爲它本身可能會執行一些代理東西...

是的,您可以使用異常類型來決定。正如Delegate.DynamicInvoke的文檔中所述,如果被調用的方法拋出異常(任何異常),它將被封裝在TargetInvocationException中。這是你可以捕捉的異常,然後你可以看看它的InnerException屬性,以瞭解它是否是你可以處理的異常。