9
votes

Automapper résout automatiquement la sous-classe correcte vers la carte?

Compte tenu des types de source suivants: xxx pré>

et les types de destination suivants p> xxx pré>

avec les mappages suivants: p> XXX PRE>

Puis-je faire ce qui suit (exemple trivial) - étant donné que je ne connais pas le type de mode de vue avant l'exécution? P>

BaseViewModel myViewModel = GetAViewModelFromSomewhere();
FirstDtoImpl dto = (FirstDtoImpl)Mapper.Map<BaseViewModel,BaseDto>(myViewModel);


1 commentaires

Droite je viens d'essayer cela et on dirait que ce n'est pas possible - sauf si je manque quelque chose?


4 Réponses :


1
votes

Pouvez-vous utiliser une interface à la place? En outre, il existe une implantation de mappeuse non générique.MAP qui pourrait fonctionner mieux dans ce cas. Si vous avez la cartographie configurée, vous pouvez simplement passer du type.


3 commentaires

Je ne suis pas sûr qu'une interface aiderait et que le non-générique exige toujours que je connais le type concret.


Ne seriez-vous pas capable de passer dans typeof (Obj) comme un paramètre? Vous pouvez sûrement résoudre le type d'en quelque sorte.


La seule mise en garde Il y a que si vous passez en deux types que vous n'avez pas de mappage, vous pourriez avoir des problèmes.



0
votes

Non Ceci n'est pas correct si vous créez une cartographie pour les types dérivés, vous devriez quand Objets de la carte Spécifiez la classe dérivée également


0 commentaires

4
votes

Vous ne pouvez pas le faire directement, mais vous pouvez le contourner avec un typeconverter.

dans les mappages que vous ajouterez: p> xxx pré>

alors vous pouvez créer le convertisseur comme: p> xxx pré>

alors vous pouvez l'utiliser comme: p>

BaseDto dto= Mapper.Map<BaseViewModel,BaseDto>(myViewModel);


1 commentaires

Cela semble prometteur. Les types de base n'ont pas d'importance - ils sont abstraits dans mon code actuel.



18
votes

J'ai constaté que si je changez les mappages sur xxx

, cela fonctionne comme prévu sans utiliser le convertisseur de type.


0 commentaires