個々の Dsl .rb ファイルに存在するインスタンスを持ち、それらを CLR から実行する Dsl を作成しようとしています。
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
Dsl のインスタンスが実行された後、どうにかして Clr コードから @metadata プロパティを取得できるようにしたいと考えています。
現在、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");
Dsl インスタンスを汚染することなく @metadata プロパティを取得できる方法はありますか?