Метод недоступен при использовании отражения - TargetInvocationError - PullRequest
0 голосов
/ 09 марта 2011

Мне удалось успешно выполнить другие методы с использованием отражения, но сейчас я получаю TargetInvocationException. Хотя TargetInvoationException указывает на метод methodInfo.Invoke, пошаговое выполнение кода показывает исключение, возникающее в методе Load при вызове SampleXMLToDataTable. SampleXMLToDataTable - это метод public static в том же классе, что и Load. Ошибка выдается, когда код пытается ввести SampleXMLToDataTable.

Есть ли проблема при вызове методов из других методов, которые вызываются с помощью отражения?

Код, вызывающий через отражение:

 private Object CreateXMLDataLoaderInstance(string xml)
 {
  object o = null;

  Assembly demandAssembly = LoadSampleDemandAssembly();
  Type assemblyType = demandAssembly.GetType("SampleDemand.XMLDataLoader");
  MethodInfo methodInfo = assemblyType.GetMethod("Load");
  o = Activator.CreateInstance(assemblyType, new Object[1] { true });

  Object[] oParamArray2 = new Object[1];

  methodInfo.Invoke(o, new Object[1] { xml });//TargetInvocationException

  return o;
 }

И метод, который он пытается вызвать:

 public void Load(string xml)
{
  XmlDocument xDoc = new XmlDocument();
  xDoc.LoadXml(xml);

  XmlNode settingsNode = null;
  foreach (XmlNode xNode in xDoc.FirstChild.ChildNodes)
  {
    string name = xNode.Name;
    string wsx = xNode.ChildNodes[0].OuterXml;

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(wsx);
    DataTable dt = SampleXMLToDataTable(doc);//Where the code breaks
    XMLSample xmlWS = new XMLSample(dt, wsx, name);

    this.sample.Add(name, xmlWS);
  }
  if (settingsNode != null)
  {
    settings = GetSettings(settingsNode);
  }
}

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Ваша ошибка просто означает, что исключение выдается где-то в вызываемом методе. Это именно то, что вы указали. Ваш метод SampleXMLToDataTable вызывает исключение. Это не имеет никакого отношения к тому, чтобы называть это через отражение. Я подозреваю, что если вы позвоните напрямую, вы получите исключение в том же месте.

Это не ограничение отражения, вы просто получаете другое исключение, потому что вы вызываете его через отражение, хотя внутреннее исключение TargetInvocationException должно дать вам больше информации.

1 голос
/ 09 марта 2011

Есть ли проблема при вызове методов из других методов, которые вызываются с использованием отражения?

Нет, TargetInvocationException означает, что метод был успешно вызван отражением, но целевой метод выдал исключение. Посмотрите на свойство InnerException TargetInvocationException для получения подробностей об исключении, которое было сгенерировано целевым методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...