2010-02-05 25 views
5

我正在尋找公開特定的.Net類型到IronPython運行時。我可以這樣做:IronPython公開.Net類型到運行時引擎

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

但暴露所有類型的運行時間。是否可以選擇性加載類型?

回答

2

不,您必須加載整個程序集。

這是由ScriptDomainManager內部管理的,它只保留加載的程序集列表,而不是類型。

最好的選擇是讓你的程序集只公開公開你希望在你的Python環境中可用的類型,並將其餘的類型留在內部。

+0

訪問是可能的,看到我的回答。 – Marcel 2011-06-24 14:02:44

3

實際上有幾個選項都不是自動的。首先,您需要調用DynamicHelpers.GetPythonTypeFromType(typeof(TypeToInject))以獲取實際可用的PythonType對象。此後,您可以:

  1. 其注入ScriptRuntime.Globals,這將是可供導入

  2. 其注入對一些代碼,你要去一個ScriptScope在運行

  3. 其注入的PythonType.GetBuiltinModule()範圍,這將是可用的W/O進口

0

可以在C#裏露出一個對象柯這樣:

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

目的是在腳本可用使用給定的名字在類級別

lab.AnyMethodOfYourObject()