2

背景オブザーバー/イベントパターン
の派生と、以下からのコードの断片を使用して、カスタムプラグインアーキテクチャを開発しました。

コードプロジェクト:プラグインマネージャー
Microsoft:AppDomains
Daniel Soltyka:シンプルなプラグイン

過去に問題がありました。各プラグインは独自のアプリドメインに読み込まれるため、お互いを表示したり、メインのアプリドメインにあるものを表示したりすることはできません(プラグイン開発者に表示したくない独自のデータがアプリケーションにあります)。メインアプリからプラグインと通信するために、新しいアプリドメイン/プラグインごとにプロキシが作成されます。問題は、5分ほどでプロキシが切断されることでした。これは、メソッドをオーバーライドしてInitializeLifetimeService()null(参照)を返すことで簡単に解決できました。

問題

問題は今、物事の反対側にあります。メインアプリ側から各プラグインにデリゲートを送信することで、プラグイン側でコールバック関数を「登録」しています。プラグインは、メインアプリの関数を呼び出すこれらのデリゲートを呼び出すことができます。ただし、デリゲートは、上記の説明のプロキシと同じように切断されているようです。

私はこれをSOで読み、ClientSponsor.Register()メソッドは素晴らしいように聞こえますが、パラメーターとして「MarshalByRefObject」が必要です。私は代表者なので、サイコロはありません。

プラグインプロキシのように、メインのアプリデリゲートをアプリドメイン間で接続し続ける方法を見つけたいと思います。

何か案は?

4

1 に答える 1

1

OK、この問題を回避する方法を見つけました。私がしたことは、アプローチを変更し、から派生した別のプロキシオブジェクトを作成し、MarshalByRefObject同じInitializeLifetimeService()関数をオーバーロードして、切断されないようにすることでした。次に、プラグインがメインアプリケーションと通信するために使用するプロキシにします。

そのため、メインアプリから各プラグインにデリゲートを送信して使用する代わりに、そのプロキシオブジェクトを送信すると、各プラグインはそれを介して通信します。電話番号を交換するようなものです。プラグインはメインアプリケーションにプロキシを送信し、メインアプリは各プラグインにプロキシを送信します。

于 2011-04-07T20:04:02.370 に答える