예제 #1
0
        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);
        }
예제 #3
0
        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);
        }