我的應用程序可以通過用戶提供的IronPython腳本進行擴展。如何爲嵌入式IronPython腳本啓用LINQ
- 首先,我創建了一個新的
ScriptScope
。 - 使用該腳本範圍,我運行一個簡短的安裝腳本,執行一些便利的導入。
- 最後,我在準備的範圍內運行所有用戶腳本。
安裝腳本是這樣的:
import clr
import System
from System import Exception
from System import Math
clr.ImportExtensions(System.Linq.Enumerable)
的想法是,用戶腳本可以使用常見的類型,如Math
或Exception
,而無需首先導入。
我還希望LINQ能夠開箱即用,所以我將最後一行添加到了安裝腳本中。但是,雖然正常導入工作正常,但擴展導入不適用。從我可以看出,常規導入成爲腳本範圍的一部分,因此可用於在相同範圍內運行的任何後續腳本。但是,擴展輸入似乎工作方式不同。
所以我的問題是:我怎麼能執行一個腳本使用LINQ而不必顯式導入擴展方法?
注意:有很多腳本,其中很多腳本只包含一個表達式。所以我寧願避免使用擴展名導入來自動爲每個腳本添加前綴的性能損失。
你看過http://mail.python.org/pipermail/ironpython-users/2011-May/014829.html嗎?這能解釋你所面對的行爲嗎? – 2012-08-19 18:11:06
@Simon:感謝您的鏈接,這當然解釋了這種行爲。現在,只要他們實現了最後一篇文章中提出的建議:「一個clr.ImbueTypeWithExtensions(cls,extcls) 方法...使擴展在任何地方都可用。」 – 2012-08-23 05:39:45
我不相信有一種方法可以做你想問的問題。你能否創建一個描述你想看到的問題(http://ironpython.codeplex.com/WorkItem/Create)? – 2012-09-06 14:45:20