单 - 编译器为服务,如何创建编译

问题描述:

我使用这个简单的程序实例: -单 - 编译器为服务,如何创建编译

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的实例与程序。编译时有超负荷需要委托,但我无法理解其用法

我正在寻找类似的解决方案,但没有找到任何运气。直到我做了这样的事情...

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

鉴于此简单的程序片段。 script.Bar("hello")会产生“你好”

为什么不把这个片段添加到你正在执行的代码来编译你的类?

// 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();