J'essaie d'invoquer une méthode via la réflexion avec des paramètres et j'obtiens:
l'objet ne correspond pas au type cible
Si j'appelle une méthode sans paramètres, cela fonctionne très bien. Basé sur le code suivant si j'appelle la méthode Test("TestNoParameters"), cela fonctionne très bien. Cependant, si j'appelle Test("Run"), je reçois une exception. Quelque chose ne va pas avec mon code?
Mon objectif initial était de passer un tableau d'objets, par exemple public void Run(object[] options) mais cela n'a pas fonctionné et j'ai essayé quelque chose de plus simple, par exemple une chaîne sans succès.
// 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);
}
}
}
}
}