1

ホストからのサービスを使用するためにアドインがホスト システムへのコールバックにも使用できる MAF パイプラインを構築しています。これらのメソッドは、アドインで処理する必要がある例外をスローできます。その場合は、それらをキャッチするだけでなく、分析することも意味する必要があります。

いつものように、appdomain の境界を越えてオブジェクトを取得するには 2 つのオプションがあります: それらをシリアル化するか、MarshalbyRefObject.

実際、私は両方のオプションで問題を抱えています:

シリアル化を使用している場合、アドインは例外を逆シリアル化できないため、例外の正確な種類を知る必要があります。つまり、ここでは抽象化レイヤーで作業することはできません。Exception クラス自体はシリアル化可能としてマークされているため、これが機能するようにすべてのサブクラスもシリアル化可能としてマークする必要があります。ホストとアドインの間でタイプを分離できないため、これは実際には解決策ではありません (抽象化に取り組むことができないため)。

MarshalbyRefObject を使用しても機能しません。また、すべての Exception は「Exception」を拡張する必要があるため、MarshalbyRefObject を拡張することはできません。

この問題を解決できる標準パターンはありますか?

4

1 に答える 1

0

過去にこれを解決した方法Dataは、例外でオブジェクトを使用して、レイヤー間でプライベート データを渡すことです。

try
{

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

基本的に、アダプター層には、特定の例外を一般的な例外に変換するコードがあります。次に、反対側のアダプター層で、データ オブジェクトを検査し、それを呼び出し元が使用できる例外に変換できます。

于 2015-07-21T21:13:37.177 に答える