Estoy tratando de invocar un método a través de la reflexión con los parámetros y me sale:Reflexión: ¿Cómo invocar el método con parámetros
objeto no coincide con destino tipo
Si invoco un método sin parámetros, funciona bien. Basado en el siguiente código si llamo al método Test("TestNoParameters")
, funciona bien. Sin embargo, si llamo al Test("Run")
, recibo una excepción. ¿Hay algún problema con mi código?
Mi propósito inicial era pasar una serie de objetos, p. public void Run(object[] options)
pero esto no funcionó y traté de algo más simple, p. cadena sin éxito
// Assembly1.dll
namespace TestAssembly
{
public class Main
{
public void Run(string parameters)
{
// Do something...
}
public void TestNoParameters()
{
// Do something...
}
}
}
// Executing Assembly.exe
public class TestReflection
{
public void Test(string methodName)
{
Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
Type type = assembly.GetType("TestAssembly.Main");
if (type != null)
{
MethodInfo methodInfo = type.GetMethod(methodName);
if (methodInfo != null)
{
object result = null;
ParameterInfo[] parameters = methodInfo.GetParameters();
object classInstance = Activator.CreateInstance(type, null);
if (parameters.Length == 0)
{
// This works fine
result = methodInfo.Invoke(classInstance, null);
}
else
{
object[] parametersArray = new object[] { "Hello" };
// The invoke does NOT work;
// it throws "Object does not match target type"
result = methodInfo.Invoke(methodInfo, parametersArray);
}
}
}
}
}
eso es lo que estamos aquí;) – womp
Esto funciona, excepto cuando se trabaja con una instancia de un montaje remoto. El problema es que derrama el mismo error que no es muy útil. Pasé varias horas intentando solucionarlo y publiqué una nueva solución general tanto para mi caso como para el proporcionado aquí. En caso de que alguien lo necesite :) –
si los parámetros son de varios tipos, ¿cómo debería ser la matriz? una serie de objetos? –