Я пытаюсь повторно использовать некоторые классы ruby, которые я написал некоторое время назад в проекте ASP.NET MVC 2. У меня проблема в том, что если класс находится в модуле, я не могу создать его экземпляр. Если я перемещаю класс за пределы модуля, он работает нормально. Вот уменьшенная версия класса, который я хочу создать:
module Generator
class CmdLine
attr_accessor :options
def initialize(output)
end
def run(args=[])
end
end
end
Если закомментировать часть модуля, я могу создать объект. Я делаю что-то неправильно? Вот код C #:
var engine = Ruby.CreateEngine();
var searchPaths = engine.GetSearchPaths().ToList();
searchPaths.Add(@"c:\code\generator\lib");
searchPaths.Add(@"C:\Ruby-ri-192\lib\ruby\1.9.1");
engine.SetSearchPaths(searchPaths);
engine.ExecuteFile(@"c:\code\generator\lib\generator\generator_cmd_line.rb");
var rubyCmdLineObj = engine.Runtime.Globals.GetVariableNames();
// These lines works when I comment out the module
// var genCmdLineObj = engine.Runtime.Globals.GetVariable("CmdLine");
// var cmdLineObj = engine.Operations.CreateInstance(genCmdLineObj);
// var results = engine.Operations.InvokeMember(cmdLineObj, "run");
// return Content(results);
var sb = new StringBuilder();
foreach (var name in rubyCmdLineObj)
{
sb.AppendFormat("{0} ", name);
}
return Content(sb.ToString());
У меня есть обходной путь - создание отдельного класса, который я могу вызывать из C #, но если мне это не нужно, я бы предпочел этого не делать. Любое руководство будет с благодарностью.