У меня есть один плагин, который принимает значение для входа и возвращает результат.Я загружаю это так:
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 *, который должен содержать 10 копий * GLOBAL_VARIABLES.MODULES [0] *.
К моему удивлению, GLOBAL_VARIABLES.MODULES [0] выполняется, хотя это не должно выполняться, я вижу это на label1.Вместо выполнения 10 экземпляров моего плагина, GLOBAL_VARIABLES.MODULES [0] выполняется 10 раз.
Похоже, что plugin_instances.exec (i) действует как ссылка на GLOBAL_VARIABLES.MODULES [0] вместо отдельной копии GLOBAL_VARIABLES.MODULES [0].
Как я могу получить каждый экземпляр индивидуально, а не в качестве справки?Спасибо!