2016-02-13 9 views
7

Sto tentando di migrare dalla vecchia API AutoMapper statica al nuovo modo di fare le cose come da this resource.Configurazione di AutoMapper v4.2 all'avvio dell'applicazione senza l'API statica

Tuttavia, sono un po 'confuso su come dovrei configurare AutoMapper in un file come Startup.cs/Global.asax.

Il vecchio modo di fare qualcosa di simile a questo è stato:

Mapper.Initialize(cfg => { 
    cfg.CreateMap<Source, Dest>(); 
}); 

Poi ovunque in tutto il codice che potrei semplicemente fare:

var dest = Mapper.Map<Source, Dest>(source); 

Ora, con la nuova versione sembra che non v'è alcuna modo per inizializzare AutoMapper all'avvio dell'applicazione e quindi utilizzarlo nel controller. L'unico modo che hanno capito come farlo sta facendo tutto nel controller in questo modo:

var config = new MapperConfiguration(cfg => { 
    cfg.CreateMap<Source, Dest>(); 
}); 

IMapper mapper = config.CreateMapper(); 
var source = new Source(); 
var dest = mapper.Map<Source, Dest>(source); 

Devo veramente configurare automapper ogni volta che lo uso adesso nel mio controller MVC o altrove nel mio applicazione? Sì, la documentazione mostra come configurarlo nel modo nuovo, ma lo stanno semplicemente impostando su una variabile chiamata config che non può funzionare attorno alla mia intera app.

Ho trovato this documentation per mantenere la sensazione statica. Ma sono un po 'confuso su cosa sia MyApplication.Mapper e dove dovrei dichiararlo. Sembra una proprietà di un'applicazione globale.

risposta

10

Si potrebbe fare qualcosa di simile.
1.) Creare una classe statica che ha un attributo di tipo MapperConfiguration

public static class AutoMapperConfig 
{ 
    public static MapperConfiguration MapperConfiguration; 

    public static void RegisterMappings() 
    { 
     MapperConfiguration = new MapperConfiguration(cfg => { 
      cfg.CreateMap<Source, Dest>().ReverseMap(); 
     }); 
    } 
} 

2.) Nel Application_Start di Global.asax, chiamare il metodo RegisterMapping

AutoMapperConfig.RegisterMappings(); 

3.) Nella tua controller, crea il mapper.

IMapper Mapper = AutoMapperConfig.MapperConfiguration.CreateMapper(); 
Mapper.Map<Dest>(source); 
+0

cosa dire di aggiungere un costruttore statico nella classe AutoMapperConfig e chiamare RegisterMappings lì? – costa

+0

che cosa succede se devi fare più di una mappatura? devi creare più di uno statico MapperConfiguration MapperConfiguration; ? – Diego

Problemi correlati