从IronPython脚本访问主机类

Max*_*Max 5 c# 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);
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

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

Cam*_*ron 3

您已设置为的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()调用成功。