Question

Essayer de Automap certains objets.
objets source a des propriétés avec _ avant le nom, les objets de destination - pas. Est-il possible de mettre en oeuvre une création de carte, que automapper tracerait tous _properties aux propriétés
pour tous les types de sources.

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; }
}
Était-ce utile?

La solution

Quelque chose que j'ajouté récemment à AutoMapper pourrait vous aider - les conventions de nommage personnalisées. Si vous consultez le coffre (R107), regarder autour de INamingConvention. En ce moment, j'ai deux conventions de nommage (de PascalCase et lower_case_underscore), mais il est vraiment juste une question de déterminer le droit RegEx pour vous y aller:

INamingConvention.cs

En ce moment, les conventions de nommage sont globaux et le profil scope. Étant donné que cette fonctionnalité est nouvelle, il n'y a pas de document autre que les tests.

Autres conseils

Voici comment je le fais

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

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

Pour cela, vous pouvez ajouter un mappage personnalisé pour résoudre ce cas particulier:

Mapper.CreateMap<From, To>()
   .ForMember( dest => dest.Id, opt => opt.MapFrom( src => src._Id ) )
   .ForMember( dest => dest.Name, opt => opt.MapFrom( src => src._Name ) );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top