从IronPython脚本访问主机类

时间:2011-06-04 02:38:58

标签: 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);

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

更新

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

1 个答案:

答案 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调用成功。