2015-07-20 100 views
1

我建立一個MAF管線其中插件還可以使用回調到主機系統從主機使用一些服務管道項目。這些方法可能會引發應該由加載項處理的異常。處理它不僅意味着只抓住它們,而且還要分析它們。如何創建例外

一如往常有兩種選擇,以獲得跨越邊界的AppDomain對象:通過串行化,或通過延長MarshalbyRefObject

其實我有問題有兩個選項:

當我使用序列,那麼我的加載項需要知道確切類型的例外,因爲它否則無法反序列化異常。這意味着我不能在抽象層上工作。 Exception類本身被標記爲可序列化的,所以也需要被標記爲serialable,使這個工程的所有子類。對我來說,這是不是一個真正的解決方案,我不能隔離主機和插件(如我不能抽象工作)

使用MarshalByRefObject的將無法正常工作以及所有異常需要延長的類型「異常」,因此不能擴展MarshalbyRefObject。

是否有可能解決這個問題的任何標準模式?

回答

0

我在過去的解決了這個問題的方法是使用Data對象中的一個例外層之間穿過的私人數據。

try 
{ 

} 
catch (SomeSpecificException spex) 
{ 
    var exception = new Exception(); 
    exception.Data.Add("Something", "Specific"); 
    throw exception; 
} 

基本上,在我的適配器層,我有代碼可以將任何特定的異常轉換爲一般的異常。然後在另一側上的適配器層,我可以檢查數據對象和將其轉換成一個例外是由它的調用者使用。