Ramesh, You can still access RubyContext through Microsoft.Scripting.Hosting.Providers.HostingHelpers.GetLanguageContext. The following extension method adds the old API back ... if you need it:
public static class IronRubyExtensions { public static RubyContext GetExecutionContext(this ScriptEngine engine) { return HostingHelpers.GetLanguageContext(engine) as RubyContext; } } Then setting a global variable from C# is: engine.GetExecutionContext().DefineGlobalVariable("gVar", 42); That being said, this API isn't final and may change in future versions of the DLR. If you rather use an API that is more final, and you still *really* need to set a global variable, you could do it by actually executing Ruby code: dynamic scope = engine.CreateScope(); scope.gVar = 42 engine.Execute("$gVar = gVar", scope); Now to the address my "if you need it" comments: Ruby.GetExecutionContext(ScriptEngine) was removed from IronRuby 1.0 as we didn't want to promote an hosting-level API that is language-specific. Also, because it's main usage is for setting global variables (since there is no DLR-level API for Ruby globals), we felt comfortable about introducing this breaking change as using Ruby global variables is not a recommended practice (see http://www.rubyist.net/~slagell/ruby/globalvars.html). ~Jimmy On Fri, May 20, 2011 at 3:36 PM, Ramesh N. <li...@ruby-forum.com> wrote: > How to setup global variables in CLR that could be accessed by scripts > running in Iron Ruby engine hosted in CLR. > > Some posts referred to the API Runtime.GetCurrentExecutionContext and > then setting up global variables there but in IronRuby version 1.1.3 > this API is missing. > > Ruby Script code (Test.rb): > class Test > def DoSomething() > puts "Value of global variable is #{$gVar}" > end > end > > C# code: > // setup runtime etc > engine = runtime.GetEngine("IronRuby"); > > // setup global variables > // something like gVar = "Hello IronRuby" > scriptSource = engine.CreateScriptSourceFromFile(scriptFile) > scriptSource.Execute() > > object myType = engine.Runtime.Globals.GetVariable(“Test”); > // Create a class instance > object myTypeObj = engine.Operations.CreateInstance(myType); > // Execute method > object result = engine.Operations.InvokeMember(myTypeObj, > “doSomething”); > > Any help is greatly appreciated. > > Thank you, > Ramesh > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Ironruby-core mailing list > Ironruby-core@rubyforge.org > http://rubyforge.org/mailman/listinfo/ironruby-core > _______________________________________________ Ironruby-core mailing list Ironruby-core@rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core