public void Build(TypeBuilder typeBuilder, FieldBuilder injectionSetField, Type injectionType) { var parameterTypes = new[] { typeof(string) }; var methods = new Methods(typeBuilder, _methodName, parameterTypes); var injectionMethod = injectionType.GetMethod(_methodName, new[] { typeof(BaseType), typeof(string) }); var il = methods.GetILGenerator(injectionType); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldarg_1); il.Emit(OpCodes.Call, methods.BaseMethod); il.EmitGetInjections(injectionSetField, injectionType); il.EmitInjectionLoop(x => { x.Emit(OpCodes.Ldarg_0); x.Emit(OpCodes.Ldarg_1); x.Emit(OpCodes.Callvirt, injectionMethod); }); il.Emit(OpCodes.Ret); }