我有一个混合c#对象,有一些实例属性和方法,我将它传递给IronPython。我想要的是从Py代码将调度同步到c#成员,包括静态和动态。
我在c#对象上实现了IDynamicMetaObjectProvider,我注意到当Py调用我的对象的静态方法,并且使用在编译时与动态定义的实例方法时,从不使用方法BindInvokeMember,但总是调用它方法BindGetMember。
我有点困惑,可能这件事无法完成?
答案 0 :(得分:0)
IronPython将始终使用BindGetMember
,然后调用结果,因为这就是Python的工作方式 - 从对象获取属性,然后调用它。您的BindGetMember
实现应该返回另一个实现BindInvokeMember
的动态对象,它将具有您需要的参数。
答案 1 :(得分:0)
我也被困了一段时间。 解决方案是实现BindGetMember并返回一个meta对象,它将表达Point指向一个函数。此函数必须返回一个委托,然后使用参数调用该委托。所以BindInvokeMember根本就没用过。这对我有用。我的代码如下所示:
select { width: 100px; }