1

そのため、さまざまなクラスとメソッドを備えた 2 つの .NET クラス ライブラリがあります。

現在、静的な一連の操作があります。例えば:

// Create and connect to device objects
classLibrary1.device objectDevice1 = new classLibrary1.device();
classLibrary2.device objectDevice2 = new classLibrary2.device();

// First Operation
objectDevice1.setSetting1(uiInput1.Text);
objectDevice1.doOperation1();

// Second Operation
// Create parameter object
classLibrary2.operationParam parameters = new classLibrary2.operationParam();
parameters.setParam1(uiInput2.Text);
parameters.setParam2(uiInput3.Text);
// Do operation with parameters
objectDevice2.doOperation1(parameters);

そのため、ユーザーはインターフェイスに特定のパラメーターを入力できますが、操作は静的です。

目標は、ユーザーに次のような操作でカスタム イベントを作成させることです。

Set property on device1
Call method 'doOperation1' on device1
Create operationParameter 'parameter'
Set 'setParam1' on 'parameter' as '100'
Set 'setParam2' on 'parameter' as '200'
Call method 'doOperation1' on device2 with 'parameter'
Create operationParameter 'parameter2'
Set 'setParam1' on 'parameter2' as '500'
Set 'setParam2' on 'parameter2' as '600'
Call method 'doOperation1' on device2 with 'parameter2'
Call method 'doOperation2' on device1

ユーザーの可能なオプションは次のとおりです。

  1. ユーザーがイベントのタイプを選択し、パラメーターを設定するウィザードを実行すると、適切な操作でイベントが作成されます。
  2. 各操作を追加して手動でイベントを作成します。
  3. 最初にウィザードを使用してビルドし、次にイベントを編集して、生成されたものの間に操作を追加します。

インターフェイスには、メソッド/プロパティにアクセスするためのドロップダウンが含まれ、ユーザーがドロップダウンから選択したときに必要なパラメーターの入力フィールドが含まれます。ユーザーがそのようなイベントを「書き込む」ことを可能にするインタープリターも構築または実装できるかどうかはわかりません。

約 40 の異なるメソッドがあり、それぞれにさまざまなプロパティまたは個別のパラメーター オブジェクトが必要です。

このコードを構成する最良の方法は何でしょうか? 「操作」オブジェクトのリストを含む「イベント」オブジェクトを作成することで、プロパティを設定するためのリフレクションを取得できました。データは、メソッド/プロパティ名とパラメーターとして SQLite DB から取得されます。文字列としてDBにあるため、複数のパラメーターを使用して Convert.ChangeType をテストしていないため、メソッドは現在機能していません。

        MethodInfo method = this.objectType.GetMethod(this.methodName);
        if (method != null)
        {
            object result = null;
            ParameterInfo[] paramInfo = method.GetParameters();
            if (paramInfo.Length == 0)
            {
                result = method.Invoke(instance, null);
            }
            else
            {
                result = method.Invoke(instance, parameters);
            }
        }
        else
        {                
            PropertyInfo pi = objectType.GetProperty(methodName);
            if (pi != null)
            {
                pi.SetValue(instance, Convert.ChangeType(parameters[0],pi.PropertyType), null);
            }
        }

パラメータオブジェクトを動的に作成し、メソッドでそれらを参照できるようにすることについてもっと心配しています。すなわち:

// Create parameter object
classLibrary2.operationParam parameters = new classLibrary2.operationParam();
parameters.setParam1(uiInput2.Text);
parameters.setParam2(uiInput3.Text);
// Do operation with parameters
objectDevice2.doOperation1(parameters); 

.NET ライブラリの公開されたメソッドを活用する方法はありますか、それともすべてのメソッドのラッパーを作成する必要がありますか?

私はこれに似たものを見つけることができませんでした。どんな助けでも大歓迎です。

4

0 に答える 0