2015-07-20 98 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; 
} 

基本上,在我的适配器层,我有代码可以将任何特定的异常转换为一般的异常。然后在另一侧上的适配器层,我可以检查数据对象和将其转换成一个例外是由它的调用者使用。