IronRuby как язык сценариев в.NET

Я хочу использовать IronRuby в качестве языка сценариев (как Lua, например) в моем проекте.NET. Например, я хочу смочь подписаться от сценария Ruby до определенных событий, запущенных в хост-приложение, и назвать методы Ruby от него.

Я использую этот код для инстанцирования механизма IronRuby:

Dim engine = Ruby.CreateEngine()
Dim source = engine.CreateScriptSourceFromFile("index.rb").Compile()
' Execute it
source.Execute()

Предположим, index.rb содержит:

subscribe("ButtonClick", handler)
def handler
   puts "Hello there"
end

Как делают меня:

  1. Заставьте метод C# Подписаться (определенный в хост-приложении) видимый от index.rb?
  2. Вызвать более поздний метод обработчиков из хост-приложения?

8
задан Peter Mortensen 21 November 2010 в 10:52
поделиться

1 ответ

Вы можете просто использовать события .NET и подписаться на них в коде IronRuby. Например, если у вас есть следующее событие в коде C#:

public class Demo
{
    public event EventHandler SomeEvent;
}

Тогда в IronRuby вы можете подписаться на него следующим образом:

d = Demo.new
d.some_event do |sender, args|
    puts "Hello there"
end

Чтобы сделать ваш . NET класс доступным в коде Ruby, используйте ScriptScope и добавьте ваш класс (this) в качестве переменной и получите к нему доступ из кода Ruby:

ScriptScope scope = runtime.CreateScope();
scope.SetVariable("my_class",this);
source.Execute(scope);

А затем из Ruby:

self.my_class.some_event do |sender, args|
    puts "Hello there"
end

Чтобы класс Demo был доступен в коде Ruby, и вы могли его инициализировать (Demo.new), вам нужно сделать сборку "обнаруживаемой" IronRuby. Если сборка не находится в GAC, добавьте каталог сборки в пути поиска IronRuby:

var searchPaths = engine.GetSearchPaths();
searchPaths.Add(@"C:\My\Assembly\Path");
engine.SetSearchPaths(searchPaths);

Затем в вашем коде IronRuby вы можете потребовать сборку, например: require "DemoAssembly.dll" и затем просто использовать ее, как вам захочется.

7
ответ дан 5 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: