2010-10-13 33 views
5

Comment puis-je remplacer le convertisseur de type utilisé par AutoMapper pour une propriété donnée?Comment spécifier un convertisseur de type spécifique pour une propriété donnée à l'aide d'AutoMapper

Par exemple, si j'ai:

public class Foo 
{ 
    public string Name { get; set; } 
} 

public class Bar 
{ 
    public string Name { get; set; } 
} 

Maintenant, je veux simplement la carte Foo.Name à Bar.Name mais en utilisant un convertisseur de type spécifié. Je vois comment je peux le faire en utilisant:

Mapper 
    .CreateMap<Foo,Bar>() 
    .ForMember(x => x.Name, opt => opt.ResolveUsing<FooNameResolver>()); 

Mais cela code en dur la conversion pour utiliser la propriété Name sur Foo. Si j'ai le même type de conversion sur d'autres propriétés dans cette classe ou dans d'autres, je dois créer une classe de résolution pour chacun d'eux.

Et je ne veux pas spécifier un convertisseur pour chaîne -> chaîne car cette conversion est spécifique à cette propriété ou à d'autres similaires. Je veux juste remplacer le convertisseur de type! Je suis sûr que cela doit être possible, mais je suis d'obturation sur elle :-(

Je suis après quelque chose comme ça.

Mapper 
    .CreateMap<Foo,Bar>() 
    .ForMember(x => x.Name, opt => opt.Using<MySpecialStringConverter>()); 

Répondre

7

J'ai découvert la réponse à lire à travers les tests unitaires pour AutoMapper Il est pas très évidente, en dépit de l'interface fluide, parce que beaucoup des méthodes sur les options de mappage de type void Cependant, ResolveUsing<>() ne retourne pas vide, mais vous permet de spécifier des options supplémentaires est là que réside la solution:..

Mapper 
    .CreateMap<Source,Dest> 
    .ForMember(dest => dest.Name, 
       opt => opt.ResolveUsing<MySpecialStringConverter>() 
          .FromMember(source => source.Name)); 

I préfèrerais ne pas avoir à spécifier le .FromMember lorsque la propriété est la valeur par défaut que AutoMapper utiliserait de toute façon et tout ce que je veux utiliser est remplacer le convertisseur de type/résolveur.