UserControlを含んだクラスライブラリ(dll)を動的にロードするサンプルコードです。 ユーザーインターフェース付きのプラグインに対応したソフトを作ることを考えて組んでみました。
各プラグインとのやり取りをするときに使う共通処理を本体側のinterfaceで定義しておきます。 プラグイン側はそのinterfaceを実装したクラスを作成。 本体はSystem.Reflection.Assembly.LoadFromでプラグインのdllを読み込み、そのクラスのインスタンスを作成してプラグインの機能を使用します。
コーディングのとき、プラグインから本体のアプリケーションで定義されたクラスを扱うには本体.exeファイルの参照を追加するだけでOKです。 本体のアプリケーションからプラグイン内のクラスを扱うときは、あらかじめ本体側で用意したinterfaceを実装したものに限るのが現実的。 各プラグイン共通のデータ構造を決めておきましょう。 それ以上のことをやりたい時はリフレクションでゴリゴリ、かなぁ?