Próbuję wywołać metodę poprzez odbicie z parametrami i otrzymuję:
obiekt nie pasuje do typu docelowego
Jeśli wywołam metodę bez parametrów, działa dobrze. Na podstawie następującego kodu, jeśli wywołam metodę Test("TestNoParameters"), działa dobrze. Jednak jeśli zadzwonię Test("Run"), otrzymam wyjątek. Czy coś jest nie tak z moim kodem?
Moim początkowym celem było przekazanie tablicy obiektów, public void Run(object[] options)ale to nie zadziałało i próbowałem czegoś prostszego, np. Łańcucha bez powodzenia.
// 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);
}
}
}
}
}