我有一个插件,它为输入取值并返回结果。我像这样加载它:
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 上看到它。GLOBAL_VARIABLES.MODULES[0] 不是执行我的插件的 10 个实例,而是执行 10 次。
似乎 plugin_instances.exec(i) 的行为类似于对 GLOBAL_VARIABLES.MODULES[0] 的引用,而不是 GLOBAL_VARIABLES.MODULES[0] 的单独副本。
如何获取每个实例个体,而不是作为参考?谢谢!