FieldReference IImportMapper.MapField(FieldReference fref) { if (fref.DeclaringType.Scope.Name == _targetModule.Name) return fref; foreach (var cInj in _classInjectees.Where(i => i is TypeAddInjectee).Cast<TypeAddInjectee>()) { var injCecilType = cInj.GetInjecteeCecilType(_injectionModule); if (!fref.DeclaringType.TypeMatches(injCecilType)) continue; var type = _targetModule.FindMatchingType(cInj.Import(_targetModule, fref.DeclaringType.Scope, this)); if (type == null) throw new InvalidOperationException("Unable to find add class for: " + fref.DeclaringType); var field = type.FindMatchingField(fref, true); var decl = FixTypeImport(_targetModule, fref.DeclaringType); return new FieldReference(field.Name, field.FieldType, decl); } foreach (var cInj in _classInjectees.Where(i => i is TypeTargetInjecteeBase)) { var injCecilType = cInj.GetInjecteeCecilType(_injectionModule); if (!fref.DeclaringType.TypeMatches(injCecilType)) continue; var classInjectee = cInj as TypeInjectee; var classStubInjectee = cInj as TypeStubInjectee; if (classInjectee != null) { foreach (var inj in classInjectee.Injectees.Where(i => i is FieldInjecteeBase).Cast<FieldInjecteeBase>()) { if (!fref.FieldMatches(inj.InjecteeField)) continue; if (inj is FieldStubInjectee) return ((FieldStubInjectee)inj).GetTargetCecilDefintion(_targetModule); } } else if (classStubInjectee != null) { var stubTargetClass = classStubInjectee.TargetType; var tdef = _targetModule.FindMatchingType(stubTargetClass); if (tdef == null) throw new InvalidOperationException("Type not found for: " + stubTargetClass.Name); var target = tdef.FindMatchingField(fref); if (target == null) throw new InvalidOperationException("Target field not found for: " + stubTargetClass.Name); return target; } } return null; }