This project has moved and is read-only. For the latest updates, please go here.

Working with dynamic .NET objects

Apr 6, 2014 at 4:15 PM
Edited Apr 6, 2014 at 4:22 PM
Hi ClearScript,

I would like to work with dynamic .NET objects, i.e. the following way
    public class MyDynamicObject : DynamicObject
    {
        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
        {
            if (binder.Name == "AnyMethod")
                // do some stuff here
                ;

            return true; // base.TryInvokeMember(binder, args, out result);
        }
    }

    // and the usage
    using (var engine = new V8ScriptEngine())
    {
        engine.AddHostObject("app", new MyDynamicObject());
                
        engine.Execute("app.AnyMethod();");
    }
I hoped that the call app.AnyMethod is landing at TryInvokeMember for doing some additional stuff here, but it doesn't. Instead I get the exception: TypeError: Object #<HostObject> has no method 'AnyMethod'. Of course, when I add AnyMethod to MyDynamicObject it works, but that's not what I want in this case. Does the calling works by reflection or/and do I have a chance to achieve the usage of dynamic objects?

Best regards,
Torsten
Coordinator
Apr 7, 2014 at 4:13 AM
Hello Torsten,

For this to work, your class must implement DynamicObject.GetDynamicMemberNames(). For example:
public override IEnumerable<string> GetDynamicMemberNames()
{
    yield return "AnyMethod";
}
Good luck!
Apr 7, 2014 at 7:38 PM
That works. Thanks a lot!

Torsten