IronRuby, DLR, Область применения
Я хочу представить домен приложения запущенного приложения в загруженном (железном)Ruby-скрипте.
Вот пример того, чего я хочу достичь:
using System;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using IronRuby;
namespace Testing
{
public class MainClass
{
public MainClass() { }
public override string ToString() { return "Hello World"; }
public static void Main()
{
ScriptEngine engine = IronRuby.Ruby.CreateEngine();
ScriptScope scope = engine.CreateScope();
String code = "p Testing::MainClass.new.to_str";
ScriptSource script = engine.CreateScriptSourceFromString(code, SourceCodeKind.SingleStatement);
script.Compile();
script.Execute(scope);
}
}
}
Конечно, код не работает, потому что AppDomain или область действия (я не уверен, что на самом деле) не загружены в движок IronRuby.
Итак, вопрос в том, как заставить код работать (выведите "Hello World!")?
1 ответ
Здесь мы можем загрузить во время выполнения сборки:
using System;
using System.Reflection;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using IronRuby;
namespace Testing
{
public class MainClass
{
public MainClass() { }
public override string ToString() { return "Hello World"; }
public static void Main()
{
ScriptEngine engine = IronRuby.Ruby.CreateEngine();
engine.Runtime.LoadAssembly(Assembly.LoadFile(Assembly.GetExecutingAssembly().Location));
ScriptScope scope = engine.CreateScope();
String code = "p Testing::MainClass.new";
ScriptSource script = engine.CreateScriptSourceFromString(code, SourceCodeKind.SingleStatement);
script.Execute(scope);
}
}
}