IronPython предоставляет тип .Net движку времени выполнения - PullRequest
5 голосов
/ 05 февраля 2010

Я хочу представить конкретные типы .Net для среды выполнения IronPython. Я могу сделать это:

ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.Runtime.LoadAssembly(typeof(Program).Assembly); // current assembly with types

Но это подвергает все типы времени выполнения. Возможна ли выборочная загрузка типа?

Ответы [ 3 ]

3 голосов
/ 06 февраля 2010

На самом деле есть несколько вариантов, но ни один из них не является автоматическим. Сначала вам нужно вызвать DynamicHelpers.GetPythonTypeFromType (typeof (TypeToInject)), чтобы получить объект PythonType, который действительно будет пригоден для использования. Тогда вы можете либо:

  1. Вставьте его в ScriptRuntime.Globals, и он будет доступен для импорта

  2. Добавьте его в ScriptScope для некоторого кода, который вы собираетесь запустить

  3. Вставьте его в область PythonType.GetBuiltinModule (), и он будет доступен без импорта

2 голосов
/ 05 февраля 2010

Нет, вы должны загрузить всю сборку.

Это внутренне управляется ScriptDomainManager , который хранит только список загруженных сборок, а не типов.

Наилучшим вариантом было бы сделать так, чтобы ваша сборка публично отображала только те типы, которые вы хотите использовать в своей среде Python, и оставляла остальные типы внутренними.

0 голосов
/ 24 июня 2011

Вы можете выставить один объект в C # примерно так:

ScriptScope scope = runtime.CreateScope(); //get a scope where we put in the stuff from the host
scope.SetVariable("lab", lab);

Объект доступен в скрипте с использованием имени

lab.AnyMethodOfYourObject()
...