示例#1
0
        public LambdaExpression BuildExecutionPlan(MapRequest mapRequest)
        {
            var typeMap = ResolveTypeMap(mapRequest.RuntimeTypes) ?? ResolveTypeMap(mapRequest.RequestedTypes);

            if (typeMap != null)
            {
                return(GenerateTypeMapExpression(mapRequest, typeMap));
            }
            var mapperToUse         = FindMapper(mapRequest.RuntimeTypes);
            LambdaExpression result = GenerateObjectMapperExpression(mapRequest, mapperToUse, this);

            DebugHelpers.LogExpression(result, "ExecutionPlan");
            return(result);
        }
示例#2
0
            private static Expression <UntypedMapperFunc> Wrap(MapRequest mapRequest, LambdaExpression typedExpression)
            {
                DebugHelpers.LogExpression(typedExpression, "typed expression");

                var sourceParameter          = Parameter(typeof(object), "source");
                var destinationParameter     = Parameter(typeof(object), "destination");
                var contextParameter         = Parameter(typeof(ResolutionContext), "context");
                var requestedSourceType      = mapRequest.RequestedTypes.SourceType;
                var requestedDestinationType = mapRequest.RequestedTypes.DestinationType;

                var destination = requestedDestinationType.IsValueType() ? Coalesce(destinationParameter, New(requestedDestinationType)) : (Expression)destinationParameter;

                // Invoking a delegate here
                return(Lambda <UntypedMapperFunc>(
                           ToType(
                               Invoke(typedExpression, ToType(sourceParameter, requestedSourceType), ToType(destination, requestedDestinationType), contextParameter)
                               , typeof(object)),
                           sourceParameter, destinationParameter, contextParameter));
            }
示例#3
0
        public void Seal(IConfigurationProvider configurationProvider, Stack <TypeMap> typeMapsPath = null)
        {
            if (_sealed)
            {
                return;
            }
            _sealed = true;

            foreach (var inheritedTypeMap in _inheritedTypeMaps)
            {
                ApplyInheritedTypeMap(inheritedTypeMap);
            }

            _orderedPropertyMaps =
                _propertyMaps
                .Union(_inheritedMaps)
                .OrderBy(map => map.MappingOrder).ToArray();

            MapExpression = new TypeMapPlanBuilder(configurationProvider, this).CreateMapperLambda(typeMapsPath);
            DebugHelpers.LogExpression(MapExpression, "MapExpression");
        }