在 C# 反射中使用 ID 生成器在静态字段上调用方法

Invoke method on static filed using IL generator in C# reflection

我正在通过 TypeBuilder 从 C# 反射生成一个新的 Type。我现在遇到的问题是如何构建方法体以在静态字段上调用方法。

现在我生成的(在运行时)class 看起来像这样:

public class Generated
{
    static private MyObject obj;

    public MyResponse Hello(MyRequest req1)
    {
        return obj.Hello(req1); // this part need to be grnerated
    }
}

所以现在我正在生成这样的方法:

MethodBuilder mb = tb.DefineMethod(
    methodInfo.Name,
    MethodAttributes.Public | MethodAttributes.Final,
    CallingConventions.HasThis | CallingConventions.ExplicitThis,
    methodInfo.ReturnType,
    arguments);

ILGenerator il = mb.GetILGenerator();
il.Emit(OpCodes.Ldnull); // right now I'm just simply returning null
il.Emit(OpCodes.Ret);

所以请告诉我如何在 Il 生成器的堆栈上加载静态字段,然后在其上调用某些方法。

所以我只是使用 ildasm.exe 反编译了我在问题中发布的 class。如果有人需要做类似于我的工作人员,下面有 Il 代码:

IL_0000:  nop
IL_0001:  ldsfld     class ConsoleApplication1.IMyInterface ConsoleApplication1.Controller::obj
IL_0006:  ldarg.1
IL_0007:  callvirt   instance class ConsoleApplication1.MyResponse ConsoleApplication1.IMyInterface::Hello(class ConsoleApplication1.MyRequest)
IL_000c:  stloc.0
IL_000d:  br.s       IL_000f
IL_000f:  ldloc.0
IL_0010:  ret

我还在我的代码中删除了行 IL_0000,c,d,f,因为(在我看来)没有必要。