【问题标题】:How to create pipeline items for exceptions如何为异常创建管道项
【发布时间】:2015-07-20 09:43:03
【问题描述】:

我正在构建一个 MAF 管道,插件也可以使用它来回调主机系统以使用来自主机的某些服务。这些方法可能会引发应由加载项处理的异常。处理这种情况不仅意味着抓住它们,而且还意味着分析它们。

与往常一样,有两个选项可以让对象跨越 appdomain 边界:通过序列化它们或通过扩展 MarshalbyRefObject

实际上我对这两个选项都有问题:

当我使用序列化时,我的加载项需要知道异常的确切类型,否则它无法反序列化异常。这意味着我不能在抽象层上工作。 Exception 类本身被标记为可序列化,因此所有子类也需要标记为可序列化才能正常工作。对我来说,这不是一个真正的解决方案,因为我无法隔离主机和加载项之间的类型(因为我无法处理抽象)

使用 MarshalbyRefObject 效果不如所有 Exception 都需要扩展“Exception”,因此不能扩展 MarshalbyRefObject。

有什么标准模式可以解决这个问题吗?

【问题讨论】:

    标签: c# exception pipeline maf


    【解决方案1】:

    我过去解决这个问题的方法是在异常中使用Data 对象在层之间传递私有数据。

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

    基本上,在我的适配器层中,我有将任何特定异常转换为一般异常的代码。然后在另一端的适配器层中,我可以检查数据对象并将其转换为可供调用者使用的异常。

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多