5

特定の.NetタイプをIronPythonランタイムに公開したいと考えています。私がすることができます:

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

しかし、それはすべてのタイプをランタイムに公開します。選択的なタイプのロードは可能ですか?

4

3 に答える 3

3

実際にはいくつかのオプションがありますが、いずれも自動ではありません。まず、DynamicHelpers.GetPythonTypeFromType(typeof(TypeToInject))を呼び出して、実際に使用できるPythonTypeオブジェクトを取得する必要があります。次に、次のいずれかを実行できます。

  1. ScriptRuntime.Globalsに挿入すると、インポートできるようになります

  2. 実行するコードに対してScriptScopeに挿入します

  3. PythonType.GetBuiltinModule()スコープに挿入すると、インポートせずに使用できるようになります

于 2010-02-06T03:04:05.810 に答える
2

いいえ、アセンブリ全体をロードする必要があります。

これは、タイプではなく、ロードされたアセンブリのリストのみを保持するScriptDomainManagerによって内部的に管理されます。

最良のオプションは、アセンブリでPython環境内で使用可能にしたいタイプのみを公開し、残りのタイプは内部のままにすることです。

于 2010-02-05T18:21:10.743 に答える
0

次のように、C#で単一のオブジェクトを公開できます。

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

オブジェクトは、指定された名前を使用してスクリプトで使用できます

lab.AnyMethodOfYourObject()
于 2011-06-24T14:01:38.497 に答える