Alimentando un objeto literal a ILGenerator

Food obj = ...;
ILGenerator gen = (...).GetILGenerator();
gen.Emit( ?? obj ?? ); // replace this 
gen.Emit(OpCodes.Call, typeof(Person).GetMethod("Eat"));

Aparentemente no es posible empujar limpiamente obj en la pila de evaluación, pero estoy abierto a trucos feos que pueden comprometer, por ejemplo. portabilidad. ModuleBuilder.DefineInitializedData permite almacenar un System.Byte [] en el .sdata. ¿Algunas ideas?

Edición: el método generado se emite como parte de un nuevo ensamblaje.

Respuestas a la pregunta(2)

Su respuesta a la pregunta