I'm trying to adapt this workaround to my project. Instead of a string I want to give an object (of type RevitFamily) to the base constructor. 
Unfortunately, I can't find out how to load an object or object reference onto the stack using Reflection.Emit. Can Anyone help me? 
So far my code looks like this, but I can't pass object to gen.Emit(opcode, _):
TypeBuilder tb = mb.DefineType(newtypename, new TypeAttributes(), typeof(LoadFamily));
var ci = typeof(LoadFamily).GetConstructor(new[] { typeof(RevitFamily) });
var constructorBuilder = tb.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new Type[0]);
var gen = constructorBuilder.GetILGenerator();
gen.DeclareLocal(typeof(RevitFamily));
Label ilLabel = gen.DefineLabel();
gen.Emit(OpCodes.Ldarg_0);                // Load "this" onto eval stack
// Here I should some how get he object f in the stack....
gen.Emit(OpCodes.Ldloca, f);              // Load pointer to RevitFamily on stack
gen.Emit(OpCodes.Call, ci);               // call base constructor (consumes "this" and the string)
gen.Emit(OpCodes.Nop);                    // Fill some space - this is how it is generated for equivalent C# code
gen.Emit(OpCodes.Nop);
gen.Emit(OpCodes.Nop);
gen.Emit(OpCodes.Ret);                    // return from constructor
t = tb.CreateType();
It is supposed to create a dynamic type with a constructor similar to this:
public class LoadconcreteFamily : LoadFamily
{
    public LoadconcreteFamily() : base(f)
    { }
}
 
    