Вызов MethodInfo с параметрами класса сущности - PullRequest
1 голос
/ 23 октября 2019

У меня есть имя класса "BusinessError". Я пытаюсь вызвать этот класс из консольного приложения (используя отражение). Возникла ошибка .. (Я очищаю Visual Studio много раз или перезапускаю)

Message = "Объект типа 'RestService.RequestGetOrderDetail' не может быть преобразован в тип 'RestService.RequestGetOrderDetail'." Но когда я пытаюсьвызвать класс BusinessHasNoError, ошибки нет ..

Как можно MethodInfo вызывать с параметром класса сущности (без строки, int с параметрами) ..

public class BusinessError
{
    public ResponseGetOrderDetail Test1(RequestGetOrderDetail requestGetOrderDetail)
    {
      ResponseGetOrderDetail responseGetOrderDetail = new ResponseGetOrderDetail(
          requestGetOrderDetail);
      return responseGetOrderDetail;
    }
}

vs


public class BusinessNoError
{
    public ResponseGetOrderDetail Test1(string id)
    {
        ResponseGetOrderDetail responseGetOrderDetail = new ResponseGetOrderDetail(id);
        return responseGetOrderDetail;
    }
}

с


public string Execute(DllInfo dllInfo)
{
      object[] parameterObject = new object[1];
      parameterObject[0] = "O19082900055";
      string dllsPath = @"C:\Scheduler\DLLs\" + dllInfo.Dll;
      string nameSpace = dllInfo.NameSpace;
      string className = dllInfo.Class;
      string methodName = dllInfo.Method;
      object result = string.Empty;
      RequestGetOrderDetail requestGetOrderDetail = new RequestGetOrderDetail();
      requestGetOrderDetail.OrderID = "O19082900055";
      parameterObject[0] = new RequestGetOrderDetail() { OrderID = "O19082900055" };
      try
      {
        Assembly assembly = Assembly.LoadFrom(dllsPath);
        Type typeInstance = assembly.GetType(nameSpace + "." + className);

        if (typeInstance != null)
        {
          MethodInfo methodInfo = typeInstance.GetMethod(methodName);
          ParameterInfo[] parameterInfo = methodInfo.GetParameters();
          object classInstance = Activator.CreateInstance(typeInstance, null);
          if (parameterInfo.Length == 0)
          {
            result = methodInfo.Invoke(classInstance, null);
          }
          else
          {
            //I want to send requestGetOrderDetail object to  methodInfo.Invoke !!!!!
            //result = methodInfo.Invoke(classInstance, requestGetOrderDetail);  
            **result = methodInfo.Invoke(classInstance, parameterObject);**
          }
        }
      }
      catch (Exception ex)
      {
        throw;
      }
      return result.ToString();
}

Пример файла

1 Ответ

0 голосов
/ 23 октября 2019

Invoke принимает параметры как объект [];(и ничего больше) Так что ваш звонок должен быть

Invoke(classInstance, new object[] { new RequestGetOrderDetail() {OrderId=..}; });
...