访问不存在的方法或属性后托管IronPython简历?

时间:2013-01-07 22:52:36

标签: ironpython

有没有办法让托管的IronPython引擎在访问对象实例的不存在的方法或属性后继续执行脚本?通常会抛出一个异常,不幸地会中断脚本的执行。

我在其范围内执行IronPython脚本,其中包含几个不同的C#类(例如A类和B类)的实例,这些类实现了或多或少相同的方法和属性。但是,除了两个类共享的方法和属性之外,类A还实现了更多的方法和属性。

A类可能并且应该继续抛出异常,因为脚本访问的此类的方法必须存在。如果他们没有,那么剧本确实有问题。

然而,

B类仅 可视化目的,因此IronPython可以忽略/跳过对此类中不存在但在A类中并且继续执行的方法的调用。

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

从DynamicObject继承B类,使用 dynamic 作为运行脚本的方法的参数类型,并在B类中执行此操作

    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        base.TryInvokeMember(binder, args, out result);
        return true;
    }

    public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    {
        base.TryInvoke(binder, args, out result);
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        base.TryGetMember(binder, out result);
        return true;
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        base.TrySetMember(binder, value);
        return true;
    }

我可以实现我的要求。以这种方式忽略对不存在的方法或属性的每次调用。无论来自哪个来源。然而,调用现有方法/属性照常工作。