コード例 #1
0
        private void cmbMethod_SelectedIndexChanged(object sender, EventArgs e)
        {
            MethodInfo mi = ((ApiMethod)cmbMethod.SelectedItem).MethodInfo;

            ParameterInfo[] parameters = mi.GetParameters();

            pnlParameters.Controls.Clear();
            foreach (ParameterInfo parameter in parameters)
            {
                ucParameter control = new ucParameter(parameter);
                pnlParameters.Controls.Add(control);
                control.Dock = DockStyle.Top;
            }
        }
コード例 #2
0
        private void cmdOk_Click(object sender, EventArgs e)
        {
            Type apiType = ((ApiType)cmbAPI.SelectedItem).Type;

            MethodInfo mi = ((ApiMethod)cmbMethod.SelectedItem).MethodInfo;

            ParameterInfo[] parameters = mi.GetParameters();

            object[] values = new object[parameters.Length];
            for (int i = 0; i < parameters.Length; i++)
            {
                ucParameter control = (ucParameter)pnlParameters.Controls[i];
                values[i] = control.Value;
            }

            InitConnector();
            Type         connectorType     = connector.GetType();
            string       propertyName      = apiType.Name;
            PropertyInfo connectorProperty = connectorType.GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance);
            object       connectorApi      = connectorProperty.GetValue(connector);

            dynamic result = mi.Invoke(connectorApi, values); // result is actually ApiCallResponse<T>, but the "T" is reflected, not fixed.

            if (result == null)
            {
                MessageBox.Show("Null result.");
                return;
            }

            if (result.Success)
            {
                DisplaySuccess(result.ReceivedObject);
            }
            else
            {
                DisplayErrors(result.Errors);
            }
        }