2016-03-04 21 views
6

Sto aggiornando AutoMapper in un progetto, convertendo dallo statico Mapper.CreateMap nel nuovo modo e iniettando un IMapper dove devo mappare.Utilizzare Automapper in ITypeConverter

Questo sta andando alla grande, tranne per un caso d'uso. Ho diversi ITypeConverter s per mappature complesse che utilizzano la funzione Mapper.Map. Come posso risolvere questo? Di seguito è riportato il codice che sto utilizzando al momento.

Lo statico Mapper.Map non riesce a trovare i miei mapping definiti perché non vengono creati utilizzando il metodo statico.

public partial class ApplicationMappingsProfile 
{ 
    private void RegisterMappings() 
    { 
     CreateMap<Application, AppDto>() 
      .ConvertUsing<ApplicationTypeConverter>(); 
    } 
} 

private class ApplicationTypeConverter : ITypeConverter<App, AppDto> 
{ 
    public AppDto Convert(ResolutionContext context) 
    { 
     var src = context.SourceValue as App; 
     if (src == null) 
     { 
      return null; 
     } 

     var dto = Mapper.Map<App, AppDto>(src); 
     dto.property = Mapper.Map<Property>(src.SomeProperty); 

     return result; 
    } 
} 

risposta

7

ResolutionContext contiene un riferimento al motore di mappatura corrente. Cambia lo Mapper.Map con context.Engine.Mapper.Map e sei a posto.

public partial class ApplicationMappingsProfile 
{ 
    private void RegisterMappings() 
    { 
     CreateMap<Application, AppDto>() 
      .ConvertUsing<ApplicationTypeConverter>(); 
    } 
} 

private class ApplicationTypeConverter : ITypeConverter<App, AppDto> 
{ 
    public AppDto Convert(ResolutionContext context) 
    { 
     var src = context.SourceValue as App; 
     if (src == null) 
     { 
      return null; 
     } 

     var dto = Mapper.Map<App, AppDto>(src); 
     dto.property = context.Engine.Mapper.Map.Map<Property>(src.SomeProperty); 

     return result; 
    } 
} 
+0

Grazie per aver condiviso il problema risolto –

+0

c'è un modo per utilizzare l'istanza di IMapper all'interno di Ctor? –

+0

@AmelSalibasic lo inietta? – Thijs