プラグイン・インタフェースDLLの作成
まずは、プラグインのインタフェースを規定するクラスライブラリを作成する。
たとえば、以下のような感じ。
namespace PluginBase { public interface IPlugin { string GetName(); } }
プラグインの作成
プラグインを作成する場合、「プラグイン・インタフェースDLLの作成」で作ったインタフェースを継承してプラグインを作成する。たとえば、以下のような感じ。
namespace MyPlugin { public class CPlugin : PluginBase.IPlugin { public string GetName() { return "My name is CPlugin."; } } }
※先ほど作成したDLLを参照設定に入れる必要がある。
プラグイン対応アプリケーション
プラグインをロードするアプリケーションは、以下のようにコードを記述することで、最初に規定したプラグインのインタフェースを取得することができる。
System.Reflection.Assembly assembly = Assembly.LoadFile("C:\\MyPlugin.dll"); Type type = assembly.GetType("MyPlugin.CPlugin"); PluginBase.IPlugin iPlugin = Activator.CreateInstance(type) as PluginBase.IPlugin;
※assembly,type,iPluginをnullチェックすること。
補足
ちなみに、PluginBaseなんていうDLLを作らなくてもソースをPluginBase.IPluginインタフェースを定義したファイルを共有すればいいじゃないか・・と思ったのですが、それはダメ。
PluginBase.IPlugin iPlugin = Activator.CreateInstance(type) as PluginBase.IPlugin;
このキャスト時にプラグインのCPluginの継承元のIPluginと、アプリが使用するIPluginが異なってしまい、キャストに失敗する。