2016-02-07 10 views
22

https://github.com/AutoMapper/AutoMapper/wiki/Migrating-from-static-APIAutoMapper Migrazione da API statica

questa modifica interrompe il sistema.

Prima di aggiornamento, io uso:

===> Startup.cs

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
    ... 
     MyAutoMapperConfiguration.Configure(); 
    } 
} 

===> MyAutoMapperConfiguration.cs

public class MyAutoMapperConfiguration 
{ 
    public static void Configure() 
    { 
     Mapper.Initialize(a => 
     { 
      a.AddProfile<AbcMappingProfile>(); 
      a.AddProfile<XyzMappingProfile>(); 
      a.AddProfile<QweMappingProfile>(); 
     }); 
    } 
} 

===> AbcMappingProfile.cs

public class AbcMappingProfile : Profile 
{ 
    protected override void Configure() 
    { 
     Mapper.CreateMap<AbcEditViewModel, Abc>(); 
     Mapper.CreateMap<Abc, AbcEditViewModel>(); 
     ... 
    } 
} 

ERRORE:

'Mapper.CreateMap()' è obsoleto: 'L'API statica verrà rimossa nella versione 5.0. Utilizzare un'istanza di MapperConfiguration e memorizzarla staticamente secondo necessità. Usa CreateMapper per creare un instanace di mapper. '

Posso usare Mapper.Map. Ora Come posso usarlo

risposta

40

Invece di:

Mapper.CreateMap<AbcEditViewModel, Abc>(); 

La nuova sintassi è:

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

Poi:

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

(Source with more examples)

+0

Tutto questo è nei documenti che OP collegato ... – DavidG

+0

anziché Mapper. Inizializza (? Non riesco a trovare il link –

+4

Sì, c'è molta confusione su cosa fare in Startup.cs per configurare AutoMapper e come utilizzarlo in un controller. Deve essere iniettato ora? –

9

Invece di Uso del profilo Automapper estensione IMapperConfigurationExpression: configurazione

Mapping:

public static class AutoMapperConfig 
{ 
    public static IMapperConfigurationExpression AddAdminMapping(
     this IMapperConfigurationExpression configurationExpression) 
    { 
     configurationExpression.CreateMap<Job, JobRow>() 
      .ForMember(x => x.StartedOnDateTime, o => o.PreCondition(p => p.StartedOnDateTimeUtc.HasValue)) 
      .ForMember(x => x.StartedOnDateTime, o => o.MapFrom(p => p.StartedOnDateTimeUtc.Value.DateTime.ToLocalTime())) 
      .ForMember(x => x.FinishedOnDateTime, o => o.PreCondition(p => p.FinishedOnDateTimeUtc.HasValue)) 
      .ForMember(x => x.FinishedOnDateTime, o => o.MapFrom(p => p.FinishedOnDateTimeUtc.Value.DateTime.ToLocalTime())); 

     return configurationExpression; 
    } 
} 

Integration (Startup.cs etc.):

 var mappingConfig = new AutoMapper.MapperConfiguration(cfg => 
     { 
      cfg.AddAdminMapping(); 
     }); 

     services.AddSingleton(x => mappingConfig.CreateMapper()); 
+0

Che cosa sono 'services' in questo contesto e come faccio a gitare il mapper nei miei controller MVC? –

+0

I servizi @PetrusTheron sono 'IServiceCollection' che viene immesso nel metodo' public void ConfigureServices (servizi IServiceCollection) 'di Asp.net Core FW. –