私はWindowsアプリケーション(C#、.Net 4.0)を持っています。このWindowsアプリケーションは、プラグインベースです。メインアプリケーションからプラグインにオブジェクトを渡したいと思います。C#のメインフォームからプラグインにオブジェクトを渡す方法
誰かが私の例を教えてください。 。
私はWindowsアプリケーション(C#、.Net 4.0)を持っています。このWindowsアプリケーションは、プラグインベースです。メインアプリケーションからプラグインにオブジェクトを渡したいと思います。C#のメインフォームからプラグインにオブジェクトを渡す方法
誰かが私の例を教えてください。 。
面白いことに、これを聞いてみると、私は今のようなことに取り組んでいます。
プラグイン用に定義しているインターフェイスで、プラグインが使用できるアプリケーションのインターフェイスであるメソッド/プロパティを指定します。
次に、アプリケーション内でそのインターフェイスを実装します。
プラグインで、そのクラスを渡すメソッドを呼び出します。
プラグインの内部では、インターフェイスで設計したメソッドとプロパティを利用することができます。
interface IPlugin
{
void CanBeCalledByTheApplication(IAppObject main);
}
interface IAppObject
{
void Alert(string msg);
}
は今すぐプラグインの実装にあなただけの
main.Alert("this is my message");
に行くことができ、あなたのアプリケーションでは、これは明らかに完全な例ではありませんが、あなた
(IPlugin)myPlugin.CanBeCalledByTheApplication(someObject);
を行くだろうアイデアを得ることができるはずです。
Paul ..私のためにタイムアウトを取ってくれてありがとう。具体的なクラスをInterfaceと同じアセンブリに配置するのが良いアイデアかどうか疑問に思っていました。プラグインと同様にメインアプリにも利用可能です。それは良いアイデアですか? – Gagan
あなたのインターフェイスを別のアセンブリに置くと、プラグインインタフェースを他の開発者に(潜在的に)配布することができ、アプリケーションの最新バージョンをそれらの内部でホストする必要はありません。また、代替のテストエンジン/モックなどを証明してプラグインをテストすることもできます。 –
ご返信が遅れました。それは最後の夜遅かった。私はまだ私の心の中に何かを持っていて、それをクリアしたいと思っていました。私が持っているものは非常に悪い考えかもしれませんが、それでもなぜ悪い考えがあるのか知りたいです。 私の考えは、具体的なクラスとインターフェイス(ユーザーがプラグインをビルドするために実装する)を別のアセンブリに配置して配布することでした。この具象クラスは、いくつかのプロパティのセットであり、オーバーライドされたToString()メソッドを持っています。私はまた、この具体的なクラスをvs2010のリンクされたファイルとして追加することを迷っていました。 これは良い考えですか?または非常に悪い。私に教えてください.. – Gagan
あなたはどのプラグインシステムを使用していますか?あなたはすでに持っているものを表示するためにいくつかのコードを投稿できますか(プラグインのしくみの一例かもしれません)。ありがとう。 – joshhendo
私のコードはこのhttp://www.codeproject.com/Articles/28949/A-Flexible-Plugin-Systemに基づいています – Gagan