如何从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
更新
我需要导入托管程序集中定义的类。
答案 0 :(得分:3)
您已将t
设置为MyClass
的实例,但您尝试使用它,就好像它是类本身一样。
您需要从IronPython脚本中导入MyClass
,或者注入某种工厂方法(因为类不是C#中的第一类对象,您无法传入{{1直接)。或者,您可以传递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
调用成功。