var config = new MapperConfiguration(cfg => { cfg.AddProfile (); cfg.CreateMap ();});var mapper = config.CreateMapper();// orIMapper mapper = new Mapper(config);var dest = mapper.Map (new Source());
Gathering configuration before initialization
AutoMapper also lets you gather configuration before initialization:
var cfg = new MapperConfigurationExpression();cfg.CreateMap ();cfg.AddProfile ();MyBootstrapper.InitAutoMapper(cfg);Mapper.Initialize(cfg);// orvar mapperConfig = new MapperConfiguration(cfg);IMapper mapper = new Mapper(mapperConfig);
LINQ projections
For the instance method of using AutoMapper, LINQ now requires us to pass in the MapperConfiguration instance:
public class ProductsController : Controller { public ProductsController(MapperConfiguration config) { this.config = config; } private MapperConfiguration config; public ActionResult Index(int id) { var dto = dbContext.Products .Where(p => p.Id == id) .ProjectTo (config) .SingleOrDefault(); return View(dto); } }
Unsupported operations
One "feature" of AutoMapper allowed you to modify configuration at runtime. That caused many problems, so the new static API does not allow you to do this. You'll need to move all your Mapper.CreateMap calls into a profile, and into a Mapper.Initialize.
For dynamic mapping, such as Mapper.DynamicMap, you can configure AutoMapper to create missing maps as needed: