Exemple #1
0
        private static void MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper,
                                             object mappedObject, PropertyMap propertyMap)
        {
            if (!propertyMap.CanResolveValue())
            {
                return;
            }

            var result     = propertyMap.ResolveValue(context);
            var newContext = context.CreateMemberContext(null, result.Value, null, result.Type, propertyMap);

            if (!propertyMap.ShouldAssignValue(newContext))
            {
                return;
            }

            try
            {
                var propertyValueToAssign = mapper.Map(newContext);

                if (propertyMap.CanBeSet)
                {
                    propertyMap.DestinationProperty.SetValue(mappedObject, propertyValueToAssign);
                }
            }
            catch (MapperMappingException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new MapperMappingException(newContext, ex);
            }
        }
            private void MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper, object mappedObject, PropertyMap propertyMap)
            {
                if (propertyMap.CanResolveValue())
                {
                    ResolutionResult result;

                    try
                    {
                        result = propertyMap.ResolveValue(context);
                    }
                    catch (AutoMapperMappingException)
                    {
                        throw;
                    }
                    catch (Exception ex)
                    {
                        var errorContext = CreateErrorContext(context, propertyMap, null);
                        throw new AutoMapperMappingException(errorContext, ex);
                    }

                    if (result.ShouldIgnore)
                    {
                        return;
                    }

                    object destinationValue = propertyMap.DestinationProperty.GetValue(mappedObject);

                    var sourceType      = result.Type;
                    var destinationType = propertyMap.DestinationProperty.MemberType;

                    var typeMap = mapper.ConfigurationProvider.FindTypeMapFor(result, destinationType);

                    Type targetSourceType = typeMap != null ? typeMap.SourceType : sourceType;

                    var newContext = context.CreateMemberContext(typeMap, result.Value, destinationValue, targetSourceType,
                                                                 propertyMap);

                    if (!propertyMap.ShouldAssignValue(newContext))
                    {
                        return;
                    }

                    try
                    {
                        object propertyValueToAssign = mapper.Map(newContext);

                        AssignValue(propertyMap, mappedObject, propertyValueToAssign);
                    }
                    catch (AutoMapperMappingException)
                    {
                        throw;
                    }
                    catch (Exception ex)
                    {
                        throw new AutoMapperMappingException(newContext, ex);
                    }
                }
            }
        private static void MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper,
                                             object mappedObject, PropertyMap propertyMap)
        {
            if (!propertyMap.CanResolveValue())
                return;

            var result = propertyMap.ResolveValue(context);
            var newContext = context.CreateMemberContext(null, result.Value, null, result.Type, propertyMap);

            if (!propertyMap.ShouldAssignValue(newContext))
                return;

            try
            {
                var propertyValueToAssign = mapper.Map(newContext);

                if (propertyMap.CanBeSet)
                {
                    TypeConverter typeConverter = TypeDescriptor.GetConverter(propertyValueToAssign);
                    Type sourcePropertyType = propertyValueToAssign.GetType();
                    Type destinationPropertyType = propertyMap.DestinationProperty.MemberType;

                    if (typeConverter != null && sourcePropertyType != destinationPropertyType)
                    {
                        propertyValueToAssign = typeConverter.ConvertTo(propertyValueToAssign, destinationPropertyType);
                    }

                    propertyMap.DestinationProperty.SetValue(mappedObject, propertyValueToAssign);
                }

            }
            catch (Exception ex)
            {
                throw new AutoMapperMappingException(newContext, ex);
            }
        }
            private void MapPropertyValue(ResolutionContext context, object mappedObject, PropertyMap propertyMap)
            {
                if (!propertyMap.CanResolveValue() || !propertyMap.ShouldAssignValuePreResolving(context))
                {
                    return;
                }

                ResolutionResult result;

                Exception resolvingExc = null;

                try
                {
                    result = propertyMap.ResolveValue(context);
                }
                catch (AutoMapperMappingException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    var errorContext = CreateErrorContext(context, propertyMap, null);
                    resolvingExc = new AutoMapperMappingException(errorContext, ex);

                    result = new ResolutionResult(context);
                }

                if (result.ShouldIgnore)
                {
                    return;
                }

                object destinationValue = propertyMap.GetDestinationValue(mappedObject);

                var sourceType      = result.Type;
                var destinationType = propertyMap.DestinationProperty.MemberType;

                var typeMap = context.ConfigurationProvider.ResolveTypeMap(result, destinationType);

                Type targetSourceType = typeMap != null ? typeMap.SourceType : sourceType;

                var newContext = context.CreateMemberContext(typeMap, result.Value, destinationValue,
                                                             targetSourceType,
                                                             propertyMap);

                if (!propertyMap.ShouldAssignValue(newContext))
                {
                    return;
                }

                // If condition succeeded and resolving failed, throw
                if (resolvingExc != null)
                {
                    throw resolvingExc;
                }

                try
                {
                    object propertyValueToAssign = context.Engine.Map(newContext);

                    AssignValue(propertyMap, mappedObject, propertyValueToAssign);
                }
                catch (AutoMapperMappingException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    throw new AutoMapperMappingException(newContext, ex);
                }
            }
            private void MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper, object mappedObject, PropertyMap propertyMap)
            {
                if (propertyMap.CanResolveValue() && propertyMap.ShouldAssignValuePreResolving(context))
                {
                    ResolutionResult result;

                    Exception resolvingExc = null;
                    try
                    {
                        result = propertyMap.ResolveValue(context);
                    }
                    catch (AutoMapperMappingException)
                    {
                        throw;
                    }
                    catch (Exception ex)
                    {
                        var errorContext = CreateErrorContext(context, propertyMap, null);
                        resolvingExc = new AutoMapperMappingException(errorContext, ex);

                        result = new ResolutionResult(context);
                    }

                    if (result.ShouldIgnore)
                        return;

                    object destinationValue = propertyMap.GetDestinationValue(mappedObject);

                    var sourceType = result.Type;
                    var destinationType = propertyMap.DestinationProperty.MemberType;

                    var typeMap = mapper.ConfigurationProvider.FindTypeMapFor(result, destinationType);

                    Type targetSourceType = typeMap != null ? typeMap.SourceType : sourceType;

                    var newContext = context.CreateMemberContext(typeMap, result.Value, destinationValue, targetSourceType,
                                                                 propertyMap);

                    if (!propertyMap.ShouldAssignValue(newContext))
                        return;

                    // If condition succeeded and resolving failed, throw
                    if (resolvingExc != null)
                        throw resolvingExc;

                    try
                    {
                        object propertyValueToAssign = mapper.Map(newContext);

                        AssignValue(propertyMap, mappedObject, propertyValueToAssign);
                    }
                    catch (AutoMapperMappingException)
                    {
                        throw;
                    }
                    catch (Exception ex)
                    {
                        throw new AutoMapperMappingException(newContext, ex);
                    }
                }
            }
        private static void MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper,
            object mappedObject, PropertyMap propertyMap)
        {
            if (!propertyMap.CanResolveValue())
                return;

            var result = propertyMap.ResolveValue(context);
            var newContext = context.CreateMemberContext(null, result.Value, null, result.Type, propertyMap);

            if (!propertyMap.ShouldAssignValue(newContext))
                return;

            try
            {
                var propertyValueToAssign = mapper.Map(newContext);

                if (propertyMap.CanBeSet)
                    propertyMap.DestinationProperty.SetValue(mappedObject, propertyValueToAssign);
            }
            catch (Exception ex)
            {
                throw new AutoMapperMappingException(newContext, ex);
            }
        }
			private void MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper, object mappedObject, PropertyMap propertyMap)
			{
				if (propertyMap.CanResolveValue())
                {
                    if (!propertyMap.ShouldAssignValue(context.CreateMemberContext(null, null, null, null, propertyMap)))
                        return;

					object destinationValue = null;
					ResolutionResult result;

					try
					{
						result = propertyMap.ResolveValue(context);
					}
                    catch (AutoMapperMappingException)
                    {
                        throw;
                    }
                    catch (Exception ex)
					{
						var errorContext = CreateErrorContext(context, propertyMap, destinationValue);
						throw new AutoMapperMappingException(errorContext, ex);
					}

                    if (result.ShouldIgnore) return;

					if (propertyMap.UseDestinationValue)
					{
						destinationValue = propertyMap.DestinationProperty.GetValue(mappedObject);
					}

					var sourceType = result.Type;
					var destinationType = propertyMap.DestinationProperty.MemberType;

					var typeMap = mapper.ConfigurationProvider.FindTypeMapFor(result, destinationType);

					Type targetSourceType = typeMap != null ? typeMap.SourceType : sourceType;

					var newContext = context.CreateMemberContext(typeMap, result.Value, destinationValue, targetSourceType,
																 propertyMap);

					try
					{
						object propertyValueToAssign = mapper.Map(newContext);

						AssignValue(propertyMap, mappedObject, propertyValueToAssign);
					}
                    catch (AutoMapperMappingException)
                    {
                        throw;
                    }
					catch (Exception ex)
					{
						throw new AutoMapperMappingException(newContext, ex);
					}
				}
			}