When you create a ScriptRuntime, you can pass in a ScriptRuntimeSetup object that specifies additional language providers to load.&nbsp; Perhaps this is less automatic than you&#39;d like, but if you were going to load those assemblies into your appdomain anyway, it&#39;s just taking the extra step of looking in that assembly for a class derived from LanguageContext.<br>
<br>
<div class="gmail_quote">On Wed, Jun 11, 2008 at 2:53 PM, Ben Hall &lt;<a href="mailto:ben2004uk@googlemail.com">ben2004uk@googlemail.com</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Oh!<br><br>Can&#39;t remember the reason why I went for the type over the file<br>extension. &nbsp;But anyway, what I&#39;m doing it manually loading in the<br>
language assemblies, finding the LanguageContext type (I know the name<br>from an XML config file) and passing that in.<br><br>I guess I could just have the file extension in the XML. My only<br>concern is that when other languages come along, how do they register<br>
their file extension with my ScriptRuntime?<br><br>I&#39;ve loaded their assemblies into my appdomain, is there any<br>additional logic required? &nbsp;Using the type, I was confident this<br>wouldn&#39;t be a problem (guess thats why I went that route).<br>
<br>It tries to get the language context from _languageIds, which is<br>populated via RegisterLanguageContext. That seems to get called via<br>the _languageProviders collection. &nbsp;This seems to have all cheeky<br>hardcoded everything I was passing in dynamically (well, based on the<br>
XML).<br><br>I can&#39;t see how I could dynamically load in a DLR language and create<br>an engine just via the file extension. If there is a way, please let<br>me know.<br><br>I hope that all makes sense (wrote while debugging DLR code)<br>
<br>Thanks<br><font color="#888888"><br>Ben<br></font>
<div>
<div></div>
<div class="Wj3C7c"><br><br>On Wed, Jun 11, 2008 at 10:33 PM, Curt Hagenlocher &lt;<a href="mailto:curt@hagenlocher.org">curt@hagenlocher.org</a>&gt; wrote:<br>&gt; The overload of GetEngine that you&#39;re using is slated to go away. Is there<br>
&gt; functionality you get out of doing it that way that you don&#39;t get by using<br>&gt; the language code or file extension?<br>&gt;<br>&gt; On Wed, Jun 11, 2008 at 2:17 PM, Ben Hall &lt;<a href="mailto:ben2004uk@googlemail.com">ben2004uk@googlemail.com</a>&gt; wrote:<br>
&gt;&gt;<br>&gt;&gt; Sorry - my code wasn&#39;t very helpful.<br>&gt;&gt;<br>&gt;&gt; The above code works fine, however I am creating the engine based on<br>&gt;&gt; the type. The code demostrates the problem:<br>&gt;&gt;<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ScriptRuntime runtime = ScriptRuntime.Create();<br>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ScriptEngine engine =<br>&gt;&gt; runtime.GetEngine(typeof(IronPython.Runtime.PythonContext));<br>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;foreach (string s in engine.GetRegisteredExtensions())<br>
&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.Console.WriteLine(s);<br>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>&gt;&gt;<br>&gt;&gt; Thanks<br>&gt;&gt;<br>&gt;&gt; Ben<br>&gt;&gt;<br>&gt;&gt; On Wed, Jun 11, 2008 at 9:22 PM, Curt Hagenlocher &lt;<a href="mailto:curt@hagenlocher.org">curt@hagenlocher.org</a>&gt;<br>
&gt;&gt; wrote:<br>&gt;&gt; &gt; I can&#39;t see into any of the helpers you&#39;ve defined. &nbsp;What do you get if<br>&gt;&gt; &gt; you<br>&gt;&gt; &gt; cut this down to the smallest possible program?<br>&gt;&gt; &gt;<br>&gt;&gt; &gt; public static void Main() {<br>
&gt;&gt; &gt; &nbsp; &nbsp; ScriptRuntime runtime = ScriptRuntime.Create();<br>&gt;&gt; &gt; &nbsp; &nbsp; ScriptEngine engine = runtime.GetEngine(&quot;py&quot;);<br>&gt;&gt; &gt; &nbsp; &nbsp; foreach (string s in engine.GetRegisteredExtensions()) {<br>
&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; System.Console.WriteLine(s);<br>&gt;&gt; &gt; &nbsp; &nbsp; }<br>&gt;&gt; &gt; }<br>&gt;&gt; &gt;<br>&gt;&gt; &gt; On Wed, Jun 11, 2008 at 12:23 PM, Ben Hall &lt;<a href="mailto:ben2004uk@googlemail.com">ben2004uk@googlemail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; Hi,<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; I have been using the latest release of the DLR (the one from<br>&gt;&gt; &gt;&gt; yesterday) but the behaviour of GetRegisteredExtensions() seems to<br>
&gt;&gt; &gt;&gt; have changed (or is broke).<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; I&#39;ve got this test:<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;[Test]<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;public void GetSaveFilter_RegisteredTypes_String()<br>
&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;{<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string expected = &quot;IronPython 2.0 Beta|*.py&quot;;<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LanguageSettings python = Helper.CreateIronPythonSettings();<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DLREngineFactory factory = new DLREngineFactory();<br>
&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ScriptEngine engine = factory.CreateEngine(python);<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EngineInformation info = new EngineInformation(engine);<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string actual = info.GetSaveFilter();<br>
&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Assert.AreEqual(expected, actual);<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;}<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; With IP Beta 2, this worked fine, but since upgrading it now fails.<br>&gt;&gt; &gt;&gt; The code is this:<br>
&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;public string GetSaveFilter()<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;{<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string filter = string.Empty;<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;foreach (string ext in Engine.GetRegisteredExtensions())<br>
&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filter += string.Format(&quot;{0}|*{1}&quot;,<br>&gt;&gt; &gt;&gt; Engine.LanguageDisplayName, ext);<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return filter;<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;}<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; &gt;From what I can tell, the code is dropping into<br>&gt;&gt; &gt;&gt; GetRegisteredFileExtensions(LanguageContext context) &nbsp;which does a<br>
&gt;&gt; &gt;&gt; check to see if the LanguageContext is null, but it always seems to be<br>&gt;&gt; &gt;&gt; null.<br>&gt;&gt; &gt;&gt; if (kvp.Value.LanguageContext == context) {<br>&gt;&gt; &gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;res.Add(kvp.Key);<br>
&gt;&gt; &gt;&gt; }<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; Can anyone else confirm this?<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; Its the same for GetRegisteredIdentifiers().<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; Thanks<br>
&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt; Ben<br>&gt;&gt; &gt;&gt; <a href="http://blog.benhall.me.uk/" target="_blank">Blog.BenHall.me.uk</a><br>&gt;&gt; &gt;&gt; _______________________________________________<br>&gt;&gt; &gt;&gt; Users mailing list<br>
&gt;&gt; &gt;&gt; <a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br>&gt;&gt; &gt;&gt; <a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt;&gt; &gt;<br>&gt;&gt; &gt;<br>&gt;&gt; &gt; _______________________________________________<br>&gt;&gt; &gt; Users mailing list<br>&gt;&gt; &gt; <a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br>
&gt;&gt; &gt; <a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>&gt;&gt; &gt;<br>&gt;&gt; &gt;<br>&gt;&gt; _______________________________________________<br>
&gt;&gt; Users mailing list<br>&gt;&gt; <a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br>&gt;&gt; <a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt;<br>&gt;<br>&gt; _______________________________________________<br>&gt; Users mailing list<br>&gt; <a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br>&gt; <a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
&gt;<br>&gt;<br>_______________________________________________<br>Users mailing list<br><a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br><a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
</div></div></blockquote></div><br>