1

私はWinFormsベースのIDEスタイルのアプリケーションを書いています。そのアプリケーションの一部として、と呼ばれるインターフェースを実装するプラグインをロードしますIFeature。機能はMEFを介してメインIDEフレームワークによってロードされ、のインスタンスをインスタンス化するように求められます。インスタンスはControlタブページに追加され、プラグインのメインの作業面を形成します。ここまでは順調ですね。

私は現在、不適切に実装されたプラグインからIDEを保護しようと取り組んでいますが、それを正確に行う方法については良いアイデアがありません。たとえば、プラグインが例外をスローするボタンである場合、IDEフレームワークコードはその呼び出しスタックにまったく関与していないため、try-catchを挿入する場所がありません。その方法でスローされた例外に対するトップレベルの保護を提供するイベントAppDomain.CurrentDomain.UnhandledExceptionとイベントにフックしましたが、例外が原因となったインスタンスに関連付けられるように、何らかのコンテキストでそれらをキャッチできることを望んでいました。問題。Application.ThreadExceptionIFeature

私は、派生したクラスを作成し、Controlあらゆる種類のメソッドをオーバーライドして、try-catchを実装するというアイデアを持っていましたが、それは

a。不器用なようです。
b。メソッドをオーバーライドするコントロールから保護しません。
c。非カスタムコントロールが使用されるのを防ぎます(たとえば、Panel

フレームワークに原因に近い保護を提供するために使用できる他の方法はありますか、それとも上記のように非常に広い範囲のイベントの処理に固執していますか?

ありがとう

マット

4

1 に答える 1

1

一般的に、私はこれで自分自身にあまり負担をかけません。

プラグイン開発者に、コントロールがスリップするという例外をキャッチすると、コントロールへのすべての参照を削除することを伝えてください。

コントロールが間違って行う可能性のあるすべてのことを想像する必要があるため、他のことを行うのは非常に困難です。

UI以外のプラグインの場合、appdomainを強制終了します。

すべての参照を削除することは安全ではない可能性があります。そのため、UIプラグインを許可する多くのプログラムでは、プラグインによるUIの描画が許可されず、代わりに、プラグインがインターフェイスを介して提案する内容に基づいてプラグインのUIが描画されます。

于 2012-05-31T11:48:45.863 に答える