背景オブザーバー/イベントパターン
の派生と、以下からのコードの断片を使用して、カスタムプラグインアーキテクチャを開発しました。
コードプロジェクト:プラグインマネージャー
Microsoft:AppDomains
Daniel Soltyka:シンプルなプラグイン
過去に問題がありました。各プラグインは独自のアプリドメインに読み込まれるため、お互いを表示したり、メインのアプリドメインにあるものを表示したりすることはできません(プラグイン開発者に表示したくない独自のデータがアプリケーションにあります)。メインアプリからプラグインと通信するために、新しいアプリドメイン/プラグインごとにプロキシが作成されます。問題は、5分ほどでプロキシが切断されることでした。これは、メソッドをオーバーライドしてInitializeLifetimeService()
null(参照)を返すことで簡単に解決できました。
問題
問題は今、物事の反対側にあります。メインアプリ側から各プラグインにデリゲートを送信することで、プラグイン側でコールバック関数を「登録」しています。プラグインは、メインアプリの関数を呼び出すこれらのデリゲートを呼び出すことができます。ただし、デリゲートは、上記の説明のプロキシと同じように切断されているようです。
私はこれをSOで読み、ClientSponsor.Register()
メソッドは素晴らしいように聞こえますが、パラメーターとして「MarshalByRefObject」が必要です。私は代表者なので、サイコロはありません。
プラグインプロキシのように、メインのアプリデリゲートをアプリドメイン間で接続し続ける方法を見つけたいと思います。
何か案は?