Sto cercando di invocare un metodo tramite la riflessione con parametri e ottengo:
l'oggetto non corrisponde al tipo di destinazione
Se invoco un metodo senza parametri, funziona benissimo. Basato sul seguente codice se chiamo il metodo Test("TestNoParameters"), funziona benissimo. Tuttavia, se chiamo Test("Run"), ottengo un'eccezione. C'è qualcosa che non va nel mio codice?
Il mio scopo iniziale era quello di passare una serie di oggetti, ad esempio public void Run(object[] options)ma questo non funzionava e ho provato qualcosa di più semplice, ad esempio una stringa senza successo.
// 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);
}
}
}
}
}