4

JintでDynamicObjectクラスを使用したいので、それを行うためのサンプルを作成しました。最初のアサートは正しく成功しますが、2番目のアサートでは失敗します。

それを行う方法はありますか、それを可能にする他の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

答えはジントコードにあると思います。プロパティを見つけるには、反射に基づいています。リフレクションが動的オブジェクトを処理するとは思わない。ラムダ式を使用するようにコードを修正する必要があるかもしれません。しかし、その場合、2.0 では動作しなくなります。

まず、GetDynamicMemberNames メソッドをオーバーライドしてみてください。おそらく、これはリフレクションがプロパティを見つけるのに役立つので、Jint.

于 2010-09-14T05:44:44.797 に答える