单 - 编译器为服务,如何创建编译
问题描述:
类
我使用这个简单的程序实例: -单 - 编译器为服务,如何创建编译
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();