4

我想在Jint下使用DynamicObject类,我已经建立了一个示例来做到这一点。第一个断言正确通过,但在第二个断言失败。

有没有办法做到这一点,或者你知道任何其他 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;
    }
}
4

1 回答 1

0

我认为答案在 jint 代码中。要查找属性,它是基于反射的。我不认为反射处理动态对象。也许应该修改代码以使用 lambda 表达式。但在这种情况下,它不再适用于 2.0。

首先,您应该尝试覆盖 GetDynamicMemberNames 方法。也许这将有助于反思以找到属性,因此是 Jint。

于 2010-09-14T05:44:44.797 回答