public static TypeBuilder AddInterfaceMethod( this TypeBuilder interfaceTypeBuilder, MethodInfo method, bool fallbackToString) { // Interface Method declaration MethodBuilder interfaceMethodBuilder = interfaceTypeBuilder .DefineInterfaceMethod( method.Name, method.ReturnType.GetServiceCompatibleFallback(fallbackToString), method.GetParameterTypes(fallbackToString)); interfaceMethodBuilder.CopySignatureOf(method); return(interfaceTypeBuilder); }
public static MethodBuilder ImplementInvocationOf( this MethodBuilder methodBuilder, MethodInfo method) { // Class Method implementation methodBuilder.CopySignatureOf(method); ILGenerator methodCodeGenerator = methodBuilder.GetILGenerator(); int index = 1; foreach (var parameter in method.GetParameters()) { methodCodeGenerator.Emit(OpCodes.Ldarg, index); index++; } methodCodeGenerator.Emit(OpCodes.Call, method); methodCodeGenerator.Emit(OpCodes.Ret); return(methodBuilder); }