2010-06-22 7 views
1

J'ai les classes exemple suivant utilisés dans une application de type MVC/MVVM:Comment mapper une hiérarchie d'héritage avec Automapper?

class A 
{ 
    public string Property1 { get; set; } 
} 

class B : A 
{ 
    public string Property2 { get; set; } 
} 

class ViewModel 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
} 

A est ma classe de base et B est la classe dérivée. ViewModel est destiné à englober les deux A & B.

Je souhaite utiliser AutoMapper pour mapper A & B vers ViewModel. Quelle est la meilleure façon de procéder? En supposant que j'ai des propriétés complexes sur A qui nécessitent un appel .ForMember, dois-je alors répéter les mêmes affectations pour ces propriétés complexes lors de la création de la carte de B vers ViewModel ou est-il possible d'hériter/réutiliser la carte? de A à ViewModel?

+0

Puisque A n'a pas Property2, quel devrait être le comportement dans ce cas? N'y faites pas attention? –

+0

@Jimmy - Oui, à ignorer. – GiddyUpHorsey

Répondre

1

Si vous mappez A à ViewModel, vous devrez ignorer les membres qui n'existent pas sur A et répéter toute configuration à partager.

L'héritage est juste une noix dure, où le comportement commence à devenir complexe et moins conventionnel. Vous pouvez toutefois créer une méthode d'extension sur l'API de configuration pour encapsuler tous les appels de configuration en double.

+0

Je suis allé avec l'idée de la méthode d'extension pour réutiliser la configuration. Cependant, je ne semble pas avoir besoin d'ignorer explicitement les membres. Devrais-je devoir? – GiddyUpHorsey

+0

L'Ignore() est vraiment juste pour la validation de la configuration. –

Questions connexes