如何在与应用程序相同的上下文中执行DLR脚本?

时间:2015-02-20 16:09:32

标签: c# clr appdomain ironruby

我正在尝试创建一个将一些资源列为静态字段的应用程序。我想从我的DLR脚本访问这些字段。但是,我注意到Dlr代码似乎与C#代码有不同的静态值。

下面是一个小型测试应用程序,用于演示此问题。

using Microsoft.Scripting.Hosting;
using System;

namespace SegmentTest {
   public static class Dlr {
      public static int MyFakeGlobalValue = 7;
      static readonly ScriptScope _scope;

      static Dlr() {
         _scope = IronRuby.Ruby.CreateEngine().CreateScope();
         var init = _scope.Engine.CreateScriptSourceFromString(@"
require 'SegmentTest'
include SegmentTest
");
         init.Execute(_scope);
      }

      public static dynamic Execute(string script) {
         return _scope.Engine.Execute(script, _scope);
      }
   }

   class Program {
      static void Main(string[] args) {
         Dlr.MyFakeGlobalValue = 12;
         Console.WriteLine(Dlr.MyFakeGlobalValue);
         Console.WriteLine(Dlr.Execute("Dlr.MyFakeGlobalValue"));

         Console.ReadKey();
      }
   }
}

第一个Console.WriteLine显示MyFakeGlobalValue为12.第二个调用显示值为7.显然,我的CLR类中对静态的更改与DLR代码不在同一个上下文中运行

在我的实际应用程序中,我有几个类调用Ruby代码,我希望我的Ruby代码能够创建这些类。但是,我最终遇到了某种嵌套上下文问题,其中Ruby脚本无法访问在早期上下文中创建的变量。

有没有办法让静态在应用程序和脚本中都相同?

0 个答案:

没有答案