拒绝IronPython访问不属于接口的公共函数

本文关键字:函数 接口 IronPython 访问 不属于 拒绝 | 更新日期: 2023-09-27 17:50:52

我在我的一个应用程序中托管了一个IronPython环境。在这种环境中,我希望访问由接口表示的对象的某些方法。但是我想让IronPython只访问接口导出的那些方法。

我可以这样做:

ITheInterface obj = (ITheInterface)origObj;
sc.SetVariable("obj", obj);

其中sc是作用域,origObj是实现ITheInterface的类的实例,ITheInterface是…嗯…接口。

但是我仍然可以访问不导出 ITheInterface的origObj实例的公共方法。

我如何限制IronPython的访问只有那些由接口导出的方法?

拒绝IronPython访问不属于接口的公共函数

这样做的原因是IronPython根据对象的运行时类型进行所有调用。为了隐藏不需要的方法,创建一个类(TheInterfaceWrapper),它持有ITheInterface引用,但只通过转发到适当的方法来实现接口。这样,运行时类型就不会有任何额外的方法。

另一个选项会干扰你的其他代码,但你可以将[PythonHidden]属性添加到你不想在IronPython中可见的方法中。