入力に値を取り、結果を返す単一のプラグインがあります。私はそれをこのようにロードしています:
public void load_modules()
{
string path = Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;
string pluginDir = Path.GetDirectoryName(path) + "\\Modules";
foreach (string s in Directory.GetFiles(pluginDir, "*.dll"))
{
Type[] pluginTypes = Assembly.LoadFile(s).GetTypes();
foreach (Type t in pluginTypes)
{
if (t.ToString().Contains("Main"))
{
MY_API module = Activator.CreateInstance(t) as MY_API;
GLOBAL_VARIABLES.MODULES.Add(module);
break;
}
}
}
}
プラグインを実行するために使用しているコードは次のとおりです。
List<MY_API> plugin_instances = new List<MY_API>(); // define container of the instances
for(int i=0; i<10; i++){
plugin_instances.add(GLOBAL_VARIABLES.MODULES[0]); // loaded module from load_modules()
MessageBox.show(plugin_instances.exec(i)); // execute plugin
}
そして、最初にロードされたモジュールのマイナーステータスを監視するタイマーがあります。
label1.text = GLOBAL_VARIABLES.MODULES[0].getStatus();
getStatus()関数は、プラグインのexec()関数に渡される変数を表示します。
問題は、* GLOBAL_VARIABLES.MODULES [0] *を実行せず、コピーを作成するためにのみ使用したこと です。* plugin_instances *リスト内のすべてのプラグインを実行しました。このリストには、* GLOBAL_VARIABLES.MODULES[0]*のコピーが10個含まれている必要があります。
驚いたことに、GLOBAL_VARIABLES.MODULES [0]は実行されるべきではありませんが、label1で実行されます。プラグインのインスタンスを10回実行する代わりに、GLOBAL_VARIABLES.MODULES[0]が10回実行されます。
plugin_instances.exec(i)は、GLOBAL_VARIABLES.MODULES [0]の個々のコピーではなく、GLOBAL_VARIABLES.MODULES[0]への参照のように機能するようです。
参照としてではなく、各インスタンスを個別に取得するにはどうすればよいですか?ありがとう!