我试图在运行时创建一个类和方法,它应该实现给定的接口。我正在使用Castle.DynamicProxy nuget包。
这是我的代码:
class Program
{
static void Main(string[] args)
{
var proxymaker = new ProxyMaker<IService>();
var service = proxymaker.Create();
var value = service.GetValue();
}
}
public interface IService
{
int GetValue();
}
public class ProxyMaker<T> where T : class
{
public T Create()
{
var classEmitter = new ClassEmitter(
new ModuleScope(),
"ServiceProxy",
null,
new[] {typeof (T)});
var method = classEmitter.CreateMethod("GetValue", typeof (int));
method.CodeBuilder.AddStatement(new ReturnStatement(new ConstReference(7)));
var type = classEmitter.BuildType();
var instance = Activator.CreateInstance(type);
return (T)instance;
}
}
正如你所看到的,在创建一个方法时,我只是返回一个7的常量int。我想在那里添加一个带有逻辑的方法体,但api并不那么友好。有没有办法可以将委托/匿名方法/ lambda表达式传递给它,它将用作方法体?