プラグイン モジュールを介してカスタマイズをサポートする必要があるシステムを開発しています。システムにプラグインできるようにするために、プラグインコードがこれらのインターフェースを実装するだけでよいように、インターフェースに対してコーディングしています。
// for illustration purposes; not actual code
public interface IPluggable
{
void Setup(PluginConfig c);
bool Process(IProcessable p);
}
アセンブリ名と完全修飾型名が指定されている、ロードする必要があるプラグインを構成から読み取ります。
<plugin assembly="Foo.Bar.PluginAssembly" type="Foo.Bar.Plugins.AwesomePlugin" />
型がFoo.Bar.Plugins.AwesomePlugin
実装さIPluggable
れ、アセンブリに含まれる場所Foo.Bar.PluginAssembly.dll
。この情報を使用して、必要なプラグインのインスタンスを作成します。
IPluggable plugin = (IPluggable)Activator.CreateInstance(assemblyName, typeName).Unwrap();
だから私の質問は3つあります:
- プラグイン システムの推奨パターンは何ですか? 私が取っているアプローチは理にかなっていますか、それとも私が見逃している明らかな欠陥/警告はありますか?
Activator.CreateInstance()
プラグイン オブジェクトを動的にインスタンス化するための適切な選択はありますか?- 読み込むアセンブリとその場所をより具体的にするにはどうすればよいですか?
.\plugins
たとえば、サブフォルダーにあるアセンブリからのみプラグインを読み込みたいとします。