2016-02-13 4 views
7

Próbuję przeprowadzić migrację ze starego statycznego interfejsu API AutoMapper do nowego sposobu wykonywania czynności zgodnie z this resource.Konfigurowanie programu AutoMapper w wersji 4.2 przy uruchomieniu aplikacji bez interfejsu statycznego API

Jednak jestem nieco zdezorientowany, jak powinienem skonfigurować AutoMapper w pliku takim jak Startup.cs/Global.asax.

Stary sposób zrobić coś takiego było:

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

Następnie wszędzie w całym kodzie I może po prostu wystarczy zrobić:

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

Teraz z nową wersją wydaje się, że nie jest sposób na zainicjowanie AutoMappera przy uruchomieniu aplikacji, a następnie użycie go w kontrolerze. Jedynym sposobem, zorientowali się, jak to zrobić robi wszystko w sterowniku tak:

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

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

Czy naprawdę muszę skonfigurować AutoMapper każdym razem używam go teraz w moich kontrolerów MVC lub gdziekolwiek indziej w moim podanie? Tak, dokumentacja pokazuje, jak skonfigurować ją w nowy sposób, ale po prostu ustawia ją na zmienną o nazwie config, która nie może obejść całej mojej aplikacji.

Znalazłem this documentation na utrzymaniu statycznego odczucia. Ale jestem trochę zdezorientowany co do MyApplication.Mapper i gdzie powinienem to zadeklarować. Wydaje się, że jest to własność globalna aplikacji.

Odpowiedz

10

Możesz zrobić coś takiego.
1.) Tworzenie statycznych klasy, która ma atrybut typu MapperConfiguration

public static class AutoMapperConfig 
{ 
    public static MapperConfiguration MapperConfiguration; 

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

2.) W Application_Start z Global.asax, należy wywołać metodę RegisterMapping

AutoMapperConfig.RegisterMappings(); 

3.) w twojej kontroler, utwórz program odwzorowujący.

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

Co powiesz na dodanie konstruktora statycznego do klasy AutoMapperConfig i wywołanie go w MapMappings? – costa

+0

co się stanie, jeśli musisz wykonać więcej niż jedno mapowanie? musisz utworzyć więcej niż jedną publiczną statyczną MapperConfiguration MapperConfiguration; ? – Diego

Powiązane problemy