2010-01-25 7 views
2

J'ai créé un modèle de présentation et je souhaite le mapper (avec AutoMapper) dans le ViewModel. ViewModel est composite/parce que j'utilise des partiels et je veux réutiliser par exemple KeyboardsViewModel également sur d'autres vues/partials.Map ViewModel/partials avec AutoMapper

Comment puis-je mapper (configuration de mappage) ce modèle de présentation dans le ViewModel? Est-ce la bonne approche?

Merci!

public class MainPresentationModel : BasePresentationModel 
{ 
    // Should map into the MainViewModel.Keyboards.Keyboards 
    public int DefaultKeyboard { get; set; } 
    // Should map into the MainViewModel.Keyboards.DefaultKeyboard 
    public IList<Keyboard> Keyboards { get; set; } 
    // Should map into the MainViewModel.Something 
    public string Something { get; set; } 
} 

public class MainViewModel : BaseViewModel 
{ 
    public KeyboardsViewModel Keyboards { get; set; } 
    public string Something { get; set; } 
} 

public class KeyboardsViewModel 
{ 
    public int DefaultKeyboard { get; set; } 
    public IList<Keyboard> Keyboards { get; set; } 
} 

Modifié: Après avoir essayé, je pense que cela est une option:

 Mapper.CreateMap<MainPresentationModel, MainViewModel>() 
      .ForMember(d => d.Keyboards, opt => opt.MapFrom(src => src)); 
     Mapper.CreateMap<MainPresentationModel, KeyboardsViewModel>(); 

Il semble que cela fonctionne, mais je ne suis pas sûr que ce soit de manière optimale/correcte ...

Répondre

0

Cette façon de procéder fonctionne définitivement. Vous pouvez également utiliser des interfaces pour ces interfaces utilisateur composites. Par exemple, le partial peut accepter un IKeyboardsViewModel, et vous n'aurez plus à vous soucier des hiérarchies d'héritage complexes. Vous pouvez ensuite donner à chaque partie une partie du modèle principal.