I am using Automapper for making a copy of an object
My domain can be reduced into this following example
Consider I have a Store with a collection of Location
public class Store
{
public string Name { get; set;}
public Person Owner {get;set;}
public IList Locations { get; set;}
}
Below is an example of a store instance
var source = new Store
{
Name = "Worst Buy",
Owner = new Person { Name= "someone", OtherDetails= "someone" },
Locations = new List
{
new Location { Id = 1, Address ="abc" },
new Location { Id = 2, Address ="abc" }
}
};
My Mappings are configured as
var configuration = new ConfigurationStore(
new TypeMapFactory(), MapperRegistry.AllMappers());
configuration.CreateMap();
configuration.CreateMap();
configuration.CreateMap();
I get the mapped instance as
var destination = new MappingEngine(configuration).Map(source);
The destination object I get from mapping has a Locations collection with the same two instances present in the source, that is
Object.ReferenceEquals(source.Locations[0], destination.Locations[0]) returns TRUE
My question is
How can I configure Automapper to create new instances of Location while mapping.
解决方案
When creating the maps you can use a method and that method can do pretty much anything. For example:
public void MapStuff()
{
Mapper.CreateMap()
.ForMember(dest => dest.Location, opt => opt.MapFrom(source => DoMyCleverMagic(source)));
}
private ReturnType DoMyCleverMagic(Location source)
{
//Now you can do what the hell you like.
//Make sure to return whatever type is set in the destination
}
Using this method you could pass it an Id in the StoreDTO and it can instantiate a location :)