从IronPython脚本访问主机类

如何从IronPython脚本访问C#类? C#:

public class MyClass { } public enum MyEnum { One, Two } var engine = Python.CreateEngine(options); var scope = engine.CreateScope(); scope.SetVariable("t", new MyClass()); var src = engine.CreateScriptSourceFromFile(...); src.Execute(scope); 

IronPython脚本:

 class_name = type(t).__name__ # MyClass class_module = type(t).__module__ # __builtin__ # So this supposed to work ... mc = MyClass() # ??? me = MyEnum.One # ??? # ... but it doesn't 

UPDATE

我需要导入托管程序集中定义的类。

您已将t设置为MyClass实例 ,但您尝试使用它,就好像它是类本身一样。

您需要从IronPython脚本中导入MyClass ,或者注入某种工厂方法(因为类不是C#中的第一类对象,所以不能直接传入MyClass )。 或者,您可以传入typeof(MyClass)并使用System.Activator.CreateInstance(theMyClassTypeObject)来创建实例。

由于您还需要访问MyEnum (请注意您在脚本中使用它而不参考它可能来自哪里),我建议只使用导入:

 import clr clr.AddReference('YourAssemblyName') from YourAssemblyName.WhateverNamespace import MyClass, MyEnum # Now these should work, since the objects have been properly imported mc = MyClass() me = MyEnum.One 

您可能必须使用脚本源类型(我认为File最佳)和脚本执行路径以使clr.AddReference()调用成功。