有没有办法让托管的IronPython引擎在访问对象实例的不存在的方法或属性后继续执行脚本?通常会抛出一个异常,不幸地会中断脚本的执行。
我在其范围内执行IronPython脚本,其中包含几个不同的C#类(例如A类和B类)的实例,这些类实现了或多或少相同的方法和属性。但是,除了两个类共享的方法和属性之外,类A还实现了更多的方法和属性。
A类可能并且应该继续抛出异常,因为脚本访问的此类的方法必须存在。如果他们没有,那么剧本确实有问题。
然而,B类仅 或可视化目的,因此IronPython可以忽略/跳过对此类中不存在但在A类中并且继续执行的方法的调用。
有什么想法吗?非常感谢!
答案 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;
}
我可以实现我的要求。以这种方式忽略对不存在的方法或属性的每次调用。无论来自哪个来源。然而,调用现有方法/属性照常工作。