2010-02-05 8 views
5

पर नेट प्रकार का खुलासा किया है। मैं विशिष्ट नेट प्रकारों को आयरनपीथन रनटाइम में बेनकाब करना चाहता हूं। मैं यह कर सकता:आयरनपीथन ने रनटाइम इंजन

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

लेकिन उस क्रम को सभी प्रकार उजागर करता है। चुनिंदा प्रकार लोडिंग संभव है?

उत्तर

2

नहीं, आपको पूरी असेंबली लोड करनी होगी।

यह आंतरिक रूप से ScriptDomainManager द्वारा प्रबंधित किया जाता है, जो केवल लोड किए गए असेंबली की सूची रखता है, प्रकार नहीं।

सबसे अच्छा विकल्प यह होगा कि आपकी असेंबली केवल आपके पाइथन पर्यावरण के भीतर उपलब्ध सार्वजनिक रूप से उन प्रकारों का पर्दाफाश करे, और बाकी प्रकार के आंतरिक को छोड़ दें।

+0

पहुँच संभव है का उपयोग कर स्क्रिप्ट में उपलब्ध है, मेरा उत्तर देखें। – Marcel

3

वास्तव में कुछ विकल्प हैं हालांकि उनमें से कोई भी स्वचालित नहीं है। सबसे पहले आपको PythonType ऑब्जेक्ट प्राप्त करने के लिए DynamicPelpers.GetPythonTypeFromType (Typeof (TypeToInject)) को कॉल करने की आवश्यकता होगी जो वास्तव में प्रयोग योग्य होगा। तो फिर तुम कर सकते हैं:

  1. यह ScriptRuntime.Globals में सम्मिलित करें और यह

  2. कुछ कोड आप जा रहे हैं के खिलाफ एक ScriptScope को इसकी सुई आयात के लिए उपलब्ध हो जाएगा

  3. चल रहा हो

    PythonType.GetBuiltinModule() गुंजाइश को इसकी सुई और डब्ल्यू/

0

का आयात ओ आप सी # ली में एक भी वस्तु को बेनकाब कर सकते हैं यह उपलब्ध हो जाएगा ke तो:

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

वस्तु दिए गए नाम के वर्ग-स्तर पर

lab.AnyMethodOfYourObject() 
संबंधित मुद्दे