如何使用反射调用动态对象的方法



我得到了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;
}

但是会抛出

类型错误:方法或属性未找到

我也尝试了scriptObject.GetType().GetMethod("execute").Invoke与相同的结果但如果我尝试手动执行它(例如scriptObject.execute(1,2)),它将返回有效的结果。如何动态调用此方法?

看一下IReflect怎么样?

var result = ((IReflect)scriptObject).InvokeMember(
    "execute",
    BindingFlags.InvokeMethod, null, null,
    inpuValues.Values.Cast<object>().ToArray(),
    null, null, null);

相关内容

  • 没有找到相关文章

最新更新