【发布时间】:2009-03-16 17:32:13
【问题描述】:
我正在尝试创建一个 Dsl,该 Dsl 将包含存在于其中的实例 单个 Dsl .rb 文件,然后从 CLR 运行它们。
我想在 IronRuby 中创建和设置 Clr 对象的值 然后以某种方式在 .rb Dsl 实例之后访问 CLR 对象 文件已运行。
这是我的 Clr 对象,目前非常简单:
namespace Horn.Core.Dsl
{
public class BuildMetaData : IBuildMetaData
{
public string Description { get; set; }
}
}
我有以下模块用于指定我的 Dsl 以及 将创建上面指定的 BuildMetaData 实例:
module MetaBuilder
module Dsl
module Main
attr_accessor :metadata
def install(name, &block)
@metadata = Horn::Core::Dsl::BuildMetaData.new
yield self if block_given?
end
def description(desc)
@metadata.Description = desc
end
def get_metadata
@metadata
end
end
end
end
include MetaBuilder::Dsl::Main
不知何故,我希望能够从 Clr 获取 @metadata 属性 Dsl 实例运行后的代码。
当前 Dsl 的一个实例如下所示:
install :horn do
description "A .NET build and dependency manager"
end
我的 C# 代码目前如下所示:
var engine = Ruby.CreateEngine();
engine.Runtime.LoadAssembly(typeof(BuildMetaData).Assembly);
engine.ExecuteFile(buildFile);
var klass = engine.Runtime.Globals.GetVariable("get_metadata");
无论如何我可以在@metadata 属性中获得而不必 污染 Dsl 实例?
【问题讨论】:
标签: ironruby