在运行时创建类型时,是否可以使用lambdas?

时间:2015-12-15 17:51:43

标签: c# asp.net .net runtime clr

我试图在运行时创建一个类和方法,它应该实现给定的接口。我正在使用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表达式传递给它,它将用作方法体?

0 个答案:

没有答案