2012-02-16 48 views
1

我使用這個簡單的程序實例: -單 - 編譯器爲服務,如何創建編譯

var evaluator = new Evaluator(
    new CompilerSettings(), 
    new Report(new ConsoleReportPrinter())); 

// Make it reference our own assembly so it can use IFoo 
evaluator.ReferenceAssembly(typeof(IFoo).Assembly); 

// Feed it some code 
evaluator.Compile(
      @" 
public class Foo : MonoCompilerDemo.IFoo 
{ 
    public string Bar(string s) { return s.ToUpper(); } 
}"); 

有沒有一種方法,我可以在主使用編譯的類foo的實例與程序。編譯時有超負荷需要委託,但我無法理解其用法

回答

2

我正在尋找類似的解決方案,但沒有找到任何運氣。直到我做了這樣的事情...

Assembly asm = ((Type)evaluator.Evaluate("typeof(Foo);")).Assembly; 
dynamic script = asm.CreateInstance("Foo"); 
script.Bar("hello") 

鑑於此簡單的程序片段。 script.Bar("hello")會產生「你好」

0

爲什麼不把這個片段添加到你正在執行的代碼來編譯你的類?

// define class Foo like you already did 
return typeof(Foo); 

然後

var type = (Type)evaluator.Compile(... 
var myFooInstance = Activator.CreateInstance(type); 

,甚至更好,只是編出 「工廠法」 到你的代碼:)

// define class Foo like you already did 
return new Func<IFoo>(() => new Foo()); 

,然後 「外」 你剛纔投的返回值回到Func<IFoo>並使用它:

var fooFactory = (Func<IFoo>)evaluator.Compile(... 
var instance = fooFactory();