如何使用反射调用动态对象的方法
How to invoke method of dynamic object using reflection
我有 dynamic
对象,其中包含 V8ScriptEngine
生成的一些 execute
函数。我需要使用在 Dictionary
对象中指定的参数来执行此方法。我试过这种方法:
private dynamic InvokeMethod(dynamic scriptObject, Dictionary<string, string> inpuValues)
{
dynamic result;
((DynamicObject) scriptObject).TryInvoke(scriptObject.execute, inpuValues.Values.ToArray(), out result);
return result;
}
但它抛出
TypeError: Method or property not found
我也试过 scriptObject.GetType().GetMethod("execute").Invoke
结果一样
但是,如果我尝试手动执行它(例如 scriptObject.execute(1,2)
),它将 return 有效结果。我如何动态调用此方法?
通过 IReflect
怎么样?
var result = ((IReflect)scriptObject).InvokeMember(
"execute",
BindingFlags.InvokeMethod, null, null,
inpuValues.Values.Cast<object>().ToArray(),
null, null, null);
我有 dynamic
对象,其中包含 V8ScriptEngine
生成的一些 execute
函数。我需要使用在 Dictionary
对象中指定的参数来执行此方法。我试过这种方法:
private dynamic InvokeMethod(dynamic scriptObject, Dictionary<string, string> inpuValues)
{
dynamic result;
((DynamicObject) scriptObject).TryInvoke(scriptObject.execute, inpuValues.Values.ToArray(), out result);
return result;
}
但它抛出
TypeError: Method or property not found
我也试过 scriptObject.GetType().GetMethod("execute").Invoke
结果一样
但是,如果我尝试手动执行它(例如 scriptObject.execute(1,2)
),它将 return 有效结果。我如何动态调用此方法?
通过 IReflect
怎么样?
var result = ((IReflect)scriptObject).InvokeMember(
"execute",
BindingFlags.InvokeMethod, null, null,
inpuValues.Values.Cast<object>().ToArray(),
null, null, null);