AutoMapper Carte Si Pas Nul, Sinon Personnalisé Convertir
Voici mon code:
Mapper.CreateMap<Foo, Foo2>()
.ForMember(dest => dest.Bar, opt => opt.MapFrom(src => src.Bar == null ? new BarViewModel() : src.Bar))
Fondamentalement, "BarViewModel" a un sans paramètre ctor qui définit les propriétés de la classe.
Donc, je suis en train de dire à AutoMapper:
Si la valeur est null, alors utilisez le contractant pour la classe. sinon l'utilisation de la cartographie que vous avez en place
Ci-dessus est de me donner un compilateur C# erreur. Et je devine un cast ne serait pas plus efficace.
Donc, il y a un AutoMapper astuce pour le faire?
Pire des cas je pouvais enlever que la cartographie de cette propriété, et il suffit de faire:
var mapped = Mapper.Map<Foo,Foo2>(src);
if (mapped.Bar == null) mapped.Bar = new BarViewModel();
Mais c'est un peu laid.
Idées?
- Qu'est-ce que l'erreur du compilateur, et pourquoi pensez-vous d'un plâtre ne marcherait pas?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser valeur personnalisée de résolution. La suivante devrait fonctionner:
Maintenant, vous pouvez utiliser
.NullSubstitute()
à remplacer la valeur NULL pour certaines valeur personnalisée dans Automapper, par exemple:Je ne reçois pas une erreur de compilation pour les éléments suivants:
...alors je me demandais si le problème n'est pas réellement avec votre mapping?
BarViewModel
hériter deBar
? Si oui, alors je pense qu'un cast aurait travail, et vous n'auriez pas besoin d'un ValueResolver. Mais je suppose que vous avez essayé déjà?De Automapper 8,
ResolveUsing
n'est plus une option mais inlineFunc
's,IValueResolver
etIMemberValueResolver
sont .Inline Func Exemple
IMemberValueResolver Exemple
Il y a une bonne documentation sur Valeur personnalisée Résolveurs ici.
Travail de démonstration