从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()
调用成功。