public override void VisitInstruction(Instruction instruction)
        {
            var field = instruction.Operand as FieldReference;
              if (field != null && field.Resolve() == _sourceField) {

            if (!_sourceField.IsStatic) {

              Instruction instructionAfterGetter;
              if (instruction.IsFieldLoad()) {
            instructionAfterGetter = instruction;
              }
              else {
            instructionAfterGetter = ProcessFieldStore(instruction, field);
              }
              _il.InsertBefore(instructionAfterGetter,
              _il.Create(OpCodes.Callvirt, _stateGetter));

            }

            instruction.Operand = new FieldReference(
              field.Name,
              field.FieldType) {
            DeclaringType = _target.ResolveGenericArguments()
              };
              }
        }
        public override void VisitInstruction(Instruction instruction)
        {
            var field = instruction.Operand as FieldReference;
              if (field != null && field.Resolve() == _field) {

            if (instruction.IsFieldLoad()) {
              instruction.Operand = ResolveGetter(field);
            }
            else {
              instruction.Operand = ResolveSetter(field);
            }

            instruction.OpCode = OpCodes.Callvirt;

              }
        }