用户动态运行方法和创建对象

时间:2013-03-24 13:44:20

标签: c# .net class user-interface methods

因此,有两个具有各种类和方法的.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. 首先使用向导构建,然后编辑事件以添加操作 在生成的那些之间。
  4. 当用户从下拉列表中选择时,界面将包含一个访问方法/属性的下拉列表,以及所需参数的输入字段。我不知道是否有可能构建或实现一个解释器,允许用户“写”这样的事件。

    大约有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库的公开方法,或者是否需要为所有方法编写包装器。

    我一直找不到类似的东西。任何帮助将不胜感激。

0 个答案:

没有答案