web-dev-qa-db-fra.com

AutoMapper Migration depuis une API statique

https://github.com/AutoMapper/AutoMapper/wiki/Migrating-from-static-API

ce changement brise mon système.

Avant la mise à jour, j'utilise:

===> 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>();
        ...
    }
}

ERREUR:

'Mapper.CreateMap ()' est obsolète: 'L'API statique sera supprimée dans la version 5.0. Utilisez une instance de MapperConfiguration et stockez statiquement si nécessaire. Utilisez CreateMapper pour créer un instanace de mappeur. '

Je peux utiliser Mapper.Map. Maintenant, comment puis-je l'utiliser

25
Asp.net

Au lieu de:

Mapper.CreateMap<AbcEditViewModel, Abc>();

La nouvelle syntaxe est:

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

Ensuite:

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

( Source avec plus d'exemples )

45
NikolaiDante

Au lieu du profil Automapper, utilisez l'extension IMapperConfigurationExpression:

Configuration de mappage:

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;
    }
}

Intégration (Startup.cs etc.):

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

        services.AddSingleton(x => mappingConfig.CreateMapper());
9