public object Map(ResolutionContext context, IMappingEngineRunner mapper)
            {
                var mappedObject = GetMappedObject(context, mapper);

                if (context.SourceValue != null && !context.Options.DisableCache)
                {
                    context.InstanceCache[context] = mappedObject;
                }

                context.TypeMap.BeforeMap(context.SourceValue, mappedObject);
                context.BeforeMap(mappedObject);

                foreach (var propertyMap in context.TypeMap.GetPropertyMaps())
                {
                    MapPropertyValue(context.CreatePropertyMapContext(propertyMap), mapper, mappedObject, propertyMap);
                }
                mappedObject = ReassignValue(context, mappedObject);

                context.AfterMap(mappedObject);
                context.TypeMap.AfterMap(context.SourceValue, mappedObject);

                return(mappedObject);
            }
            public object Map(ResolutionContext context, IMappingEngineRunner mapper)
            {
                var mappedObject = GetMappedObject(context, mapper);
                if (context.SourceValue != null && !context.Options.DisableCache)
                    context.InstanceCache[context] = mappedObject;

                context.TypeMap.BeforeMap(context.SourceValue, mappedObject);
                context.BeforeMap(mappedObject);

                foreach (PropertyMap propertyMap in context.TypeMap.GetPropertyMaps())
                {
                    MapPropertyValue(context.CreatePropertyMapContext(propertyMap), mapper, mappedObject, propertyMap);
                }
                mappedObject = ReassignValue(context, mappedObject);

                context.AfterMap(mappedObject);
                context.TypeMap.AfterMap(context.SourceValue, mappedObject);

                return mappedObject;
            }