我希望将特定的.Net类型公开给IronPython运行时。我可以这样做:
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.Runtime.LoadAssembly(typeof(Program).Assembly); // current assembly with types
但这会将所有类型暴露给运行时。是否可以选择性加载?
答案 0 :(得分:3)
实际上有几个选项,但它们都不是自动的。首先,您需要调用DynamicHelpers.GetPythonTypeFromType(typeof(TypeToInject))来获取实际可用的PythonType对象。然后你可以:
将其注入ScriptRuntime.Globals并且可以导入
针对您将要运行的某些代码将其注入ScriptScope
将其注入PythonType.GetBuiltinModule()范围,并且无需导入即可使用
答案 1 :(得分:2)
不,你必须加载整个组件。
这是由ScriptDomainManager内部管理的,它只保留已加载程序集的列表,而不是类型。
最好的选择是让你的程序集只公开你想要在Python环境中公开的类型,并将其余的类型留在内部。
答案 2 :(得分:0)
您可以在C#中公开单个对象,如下所示:
ScriptScope scope = runtime.CreateScope(); //get a scope where we put in the stuff from the host
scope.SetVariable("lab", lab);
该对象在脚本中可用,使用给定名称
lab.AnyMethodOfYourObject()