J'essaye de créer un Dsl qui aura des instances qui vivent dans fichiers Dsl .rb individuels, puis les exécuter à partir du CLR.Accéder à la valeur de retour à partir d'un Dsl IronRuby
Je veux créer et définir les valeurs de l'objet Clr dans IronRuby et alors en quelque sorte l'accès à l'objet CLR après l'instance .rb Dsl fichier a été exécuté.
Voici mon objet clr qui est très simple au moment:
namespace Horn.Core.Dsl
{
public class BuildMetaData : IBuildMetaData
{
public string Description { get; set; }
}
}
Je le module suivant que je me sers de préciser mon Dsl et qui va créer une instance de la BuildMetaData spécifiée ci-dessus:
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
Je veux en quelque sorte d'être en mesure d'obtenir la propriété @metadata à partir du code Clr après une instance de la Dsl a couru.
Une instance de la Dsl ressemble à ce moment:
install :horn do
description "A .NET build and dependency manager"
end
Mon code C# ressemble à ce moment:
var engine = Ruby.CreateEngine();
engine.Runtime.LoadAssembly(typeof(BuildMetaData).Assembly);
engine.ExecuteFile(buildFile);
var klass = engine.Runtime.Globals.GetVariable("get_metadata");
Y at-il de toute façon je peux obtenir à la propriété @metadata sans avoir à polluer l'instance Dsl?