Domanda

Cercando di AutoMap alcuni oggetti.
oggetti di origine ha proprietà con _ prima del nome, oggetti di destinazione - non hanno. E 'possibile implementare ONE creazione della mappa, che avrebbe automapper mappa tutte _properties per immobili
per tutti i tipi di sorgente.

class MyMapper<TFrom, TTo>{
    TTo PerformMap(TFrom fromObject){
        Mapper.CreateMap<From, To>(); // ???
        TTo result = Mapper.Map<From, To>(fromObject);
        //result.Id.ShouldBe(value from TFrom._Id);
        return result;
    }
}

class From
{
    public int _Id { get; set; }
    public string _Name { get; set; }
}

class To
{
    public int Id { get; set; }
    public string Name { get; set; }
}
È stato utile?

Soluzione

Qualcosa ho aggiunto di recente per automapper potrebbe aiutare - denominazione personalizzato convenzioni. Se si estrae il tronco (R107), guardarsi intorno per INamingConvention. In questo momento, ho due convenzioni di denominazione (PascalCase e lower_case_underscore), ma è davvero solo una questione di capire la RegEx diritto di farti andare:

INamingConvention.cs

In questo momento, le convenzioni di denominazione sono globali e profilo con ambito. Dal momento che questa funzione è stata introdotta, non c'è alcuna documentazione diverso dai test.

Altri suggerimenti

Questo è come lo sto facendo

Mapper.Initialize(cfg =>
        {
            cfg.RecognizeDestinationPrefixes(new []{"_"});
            cfg.RecognizePrefixes(new[] { "_" });

            cfg.CreateMap<To, From>().ReverseMap();
        });

Per questo si potrebbe aggiungere una mappatura personalizzata per risolvere questo caso particolare:

Mapper.CreateMap<From, To>()
   .ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
   .ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top