public static Expression GetAppropriateTypedMappingContextAccess(this IMemberMapperData mapperData, Type[] contextTypes) { var access = mapperData.GetAppropriateMappingContextAccess(contextTypes); var typedAccess = mapperData.GetTypedContextAccess(access, contextTypes); return(typedAccess); }
private Expression GetDictionaryAccess(IMemberMapperData mapperData) { var parentContextAccess = mapperData.GetAppropriateMappingContextAccess(typeof(object), _rootDictionaryMember.Type); if (parentContextAccess.NodeType != Parameter) { return(MemberMapperDataExtensions.GetTargetAccess(parentContextAccess, _rootDictionaryMember.Type)); } var dictionaryMapperData = mapperData; while (dictionaryMapperData.TargetMember != _rootDictionaryMember) { dictionaryMapperData = dictionaryMapperData.Parent; } return(dictionaryMapperData.TargetInstance); }
private Expression GetTypeCheckConditionOrNull(IMemberMapperData mapperData) { var sourceType = (SourceType == _allSourceTypes) ? typeof(object) : SourceType; var contextTypes = new[] { sourceType, TargetType }; var context = mapperData.GetAppropriateMappingContext(contextTypes); if (!TargetType.IsDerivedFrom(context.TargetType)) { return(null); } var contextAccess = mapperData.GetAppropriateMappingContextAccess(contextTypes); if (contextAccess == mapperData.MappingDataObject) { return(null); } var targetAccess = mapperData.GetTargetAccess(contextAccess, TargetType); var targetAccessNotNull = targetAccess.GetIsNotDefaultComparison(); return(targetAccessNotNull); }