如何从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);
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
UPDATE
我需要导入托管程序集中定义的类.
您已设置为的t一个实例MyClass,但您试图将它当作类本身来使用。
您需要MyClass从 IronPython 脚本中导入,或者注入某种工厂方法(因为类不是 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
Run Code Online (Sandbox Code Playgroud)
您可能必须尝试使用脚本源类型(我认为File效果最好)和脚本执行路径才能使clr.AddReference()调用成功。