Вы можете просто использовать события .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);
А потом из Руби:
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"
, а затем просто использовать ее по своему усмотрению.