private void ProcessPropertyTypePair(Coder coder, PropertyNameContext context, PropertyMap propertyMap) { var typePair = propertyMap.GetTypePair(); //typepair already in template cache string text; if (TemplateCache.TryGetValue(typePair, out text)) { coder.ApplyTemplate(context, text); return; } TypeMap nodeMap; //typepair explicitly mapped by user ExplicitTypeMaps.TryGetValue(typePair, out nodeMap); if (nodeMap == null) { if (!ImplicitTypeMaps.TryGetValue(typePair, out nodeMap)) { //create implicit map nodeMap = TypeMapFactory.CreateTypeMap(propertyMap.SrcType, propertyMap.DestType, Options); ImplicitTypeMaps.AddIfNotExist(nodeMap); } } var propAssignment = ProcessTypeMap(nodeMap, context.SrcFullMemberName, context.DestFullMemberName); coder.AttachPropertyAssignment(propAssignment, propertyMap); return; }