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; } }
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); } }