我想使用DynamicObject类在Jint下,并且我已经构建了一个示例来实现它。第一个断言正确传递,但在第二个断言时失败。
有什么方法可以这样做吗?或者您知道其他的javascript引擎使它成为可能吗?
public void Jtest()
{
Jint.JintEngine engine = new JintEngine();
dynamic subject = new MyDynamicObject();
dynamic x = subject.myProp.otherProp;
Assert.AreEqual(subject, x);
engine.SetParameter("myClass", subject);
object result = engine.Run(@"return myClass.myProp.otherProp;");
// result is null here
Assert.AreEqual(subject, result);
}
public class MyDynamicObject : System.Dynamic.DynamicObject
{
public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result)
{
result = this;
return true;
}
}发布于 2010-09-14 05:44:44
我认为答案是用jint密码。要找到属性,它是基于反射的。我不认为反射处理动态对象。也许应该修改代码以使用lambda表达式。但在这种情况下,它将不再适用于2.0。
首先,您应该尝试重写方法GetDynamicMemberNames。也许这将有助于反射找到属性,因此Jint。
https://stackoverflow.com/questions/3702917
复制相似问题