2016-10-07 138 views
-1

我有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)),它會返回有效的結果。我怎樣才能動態調用這個方法?

回答

1

如何通過IReflect

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