Czy jest możliwe zapisanie dynamicznego złożenia na dysku?
Niedawno kupiłem książkę AyendeBudowanie DSL w Boo (kup, przeczytaj, to niesamowite), ale zbliżam się do problemu z implementacją i chcę zobaczyć, jak wygląda wygenerowany kod. Normalnie używałbym reflektora, aby spojrzeć na kod, ale w tym przypadku zespoły są dynamiczne i tylko w pamięci. Czy istnieje sposób zapisywania dynamicznych zespołów na dysku, aby móc je odzwierciedlić?
EDYCJA / Moja odpowiedź:
Wow, trochę czasu zajęło mi powrót do tego. Niestety, zostawiłem ważne pytanie z pierwotnego pytania.
Ważny bit: używamBiblioteka RhinoDSL Ayende jak zaleca w książce. Mam dostęp do kompilatora boo w mojej podklasie DslEngine, który wygląda tak:
public class JobEngine : DslEngine
{
protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
{
pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
}
}
Aby zmienić najmniej i dostać to, co chciałem, musiałem dodać jedną linię ...
public class JobEngine : DslEngine
{
protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
{
compiler.Parameters.GenerateInMemory = false; // <--- This one.
pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
}
}
Spowodowało to, że kompilator wyprowadził zespół do mojego katalogu ~ LocalSettings Temp, a następnie mogłem to odzwierciedlić. Ważne jest, aby pamiętać, że dokonanie tej zmiany spowodowało przerwanie reszty programu (RhinoDSL nie mógł już znaleźć zespołów w pamięci, ponieważ wysyłam je na dysk), więc jest to użyteczne tylko jako narzędzie debugowania.