2008-11-15 80 views
1

我在C#/ Winforms应用程序中托管IronPython 2.0。我希望Python能够访问宿主应用程序中的各种全局静态对象。如何从托管的IronPython访问内部对象?

举个例子,主机应用程序有一个内部的静态类“全球性”,它包含了一些静态公共成员,这是在全球不同的对象,我想访问:

static class Global 
{ 
    public static FeederSystem Feed ... 
    public static LightingSystem Lighting ... 
    public static IOSystem Io ... 
    ... etc 
} 

我希望能够在Python代码中引用Global.Lighting.xxx,就像我在C#应用程序中一样。

是否存在IronPythonic的'InternalsVisibleTo'等价物,我可以使用它来允许Python代码查看主机应用程序的内部类型?还是我需要让它们全部公开?

回答

2

好吧,所以我在DLR规范的帮助下,从https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf以及IP/DLR源代码中,自己完成了这项工作。

这不是很优雅,并且使用PrivateRintimeSetup对象并将PrivateBinding属性设置为True可能会比使用CreateEngine更简洁。

但是这一个工程:

Dictionary<string, object> options = new Dictionary<string, object>(); 
options.Add("PrivateBinding", true); 

_engine = Python.CreateEngine(options); 
+0

好找,谢谢! – 2009-10-20 18:22:33