public void Process() { typeSystem = TypeProcessor.ModuleWeaver.ModuleDefinition.TypeSystem; CreateDisposeBoolMethod(); InjectIntoDispose(); TypeProcessor.AddFinalizer(DisposeBoolMethod); }
void CreateDisposeBoolMethod() { var typeSystem = TypeProcessor.ModuleWeaver.ModuleDefinition.TypeSystem; disposeBoolMethod = new MethodDefinition("Dispose", MethodAttributes.HideBySig | MethodAttributes.Private, typeSystem.Void); var disposingParameter = new ParameterDefinition("disposing", ParameterAttributes.None, typeSystem.Boolean); disposeBoolMethod.Parameters.Add(disposingParameter); var instructions = disposeBoolMethod.Body.Instructions; instructions.Add(TypeProcessor.GetDisposeEscapeInstructions()); instructions.Add( Instruction.Create(OpCodes.Ldarg_0), Instruction.Create(DisposeUnmanagedMethod.GetCallingConvention(), DisposeUnmanagedMethod)); instructions.Add(TypeProcessor.GetDisposedInstructions()); instructions.Add(Instruction.Create(OpCodes.Ret)); TypeProcessor.TargetType.Methods.Add(disposeBoolMethod); TypeProcessor.AddFinalizer(disposeBoolMethod); }