編集
私は完全にあなたの質問の編集に基づいて私の答えを書き直しました。
最小限の手順でプラグインアーキテクチャを実装することがいかに簡単かをご紹介します。
ステップ1:プラグインが実装するインターフェイスを定義します。
namespace PluginInterface
{
public interface IPlugin
{
string Name { get; }
string Run(string input);
}
}
ステップ2:IPluginを実装したプラグインを作成します。
namespace PluginX
{
using PluginInterface;
public class Plugin : IPlugin
{
public string Name
{
get { return "Plugin X"; }
}
public string Run(string input)
{
return input;
}
}
}
ステップ3:プラグインを実行します。
namespace PluginTest
{
using System;
using System.IO;
using System.Runtime.Remoting;
using PluginInterface;
class Program
{
static void Main(string[] args)
{
string pluginFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "PluginX.dll");
ObjectHandle handle = Activator.CreateInstanceFrom(pluginFile, "PluginX.Plugin");
IPlugin plugin = handle.Unwrap() as IPlugin;
string pluginName = plugin.Name;
string pluginResult = plugin.Run("test string");
}
}
}
が、これは単にプラグインarchitechureの基本的な、最も簡単な例であり、心に留めておいてください。また、このような
- ようなものは、それ自身の
AppDomain
- の内側にあなたのプラグインを実行するためのプラグインのホストを作成するのですできるインターフェイス、抽象クラス、または
- 使用リフレクションを使用してプラグインを飾るために、属性、インターフェースのいずれかを選択ILバインドジョブを実行するためにILから放出されたサンクスまたはデリゲート
デザインがそうするよう指示されている場合。
プラグインのアーキテクチャは単純ではありません。単純ならば、すべてのソフトウェアスタックとプログラミング言語に設計によって組み込まれます。各プラグインは何らかの種類の定義された方法でコアプログラムと通信する必要があります(そうでなければ、別々のプログラムになります)。 – Aron