-2

入力に値を取り、結果を返す単一のプラグインがあります。私はそれをこのようにロードしています:

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]への参照のように機能するようです。

参照としてではなく、各インスタンスを個別に取得するにはどうすればよいですか?ありがとう!

4

2 に答える 2

0

質問の変更を反映するように更新します。

実行するモジュールタイプごとに、モジュールタイプの新しいインスタンスを作成する必要があります。次のコードをクリーンアップする必要があるかもしれませんが、それはあなたにアイデアを与えます:

 plugin_instances.add(Activator.CreateInstance(GLOBAL_VARIABLES.MODULES[0].GetType()));
于 2011-11-07T01:52:28.727 に答える
0

コピーを作成する必要があり、コピーを作成する型にはパラメーターのないコンストラクターがあるため、新しいインスタンスを動的に作成できます。

 var moduleType = GLOBAL_VARIABLES.MODULES[0].GetType();
 for(int i=0; i<10; i++)
 {
     plugin_instances.add((MY_API)Activator.CreateInstance(moduleType)); 
于 2011-11-07T02:04:37.737 に答える