2016-03-04 49 views
6

我在項目中升級AutoMapper,將靜態Mapper.CreateMap轉換爲新方式,並在需要映射的地方注入IMapper在ITypeConverter中使用Automapper

除了一個用例外,這個過程很好。對於使用Mapper.Map函數的複雜映射,我有幾個ITypeConverter。我怎樣才能解決這個問題?以下是我目前使用的代碼。

靜態Mapper.Map找不到我定義的映射,因爲它不是使用靜態方法創建的。

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; 
    } 
} 

回答

7

ResolutionContext包含對當前映射引擎的引用。切換Mapper.Mapcontext.Engine.Mapper.Map,你很好去。

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

謝謝你分享你解決的問題 –

+0

有沒有辦法在ctor中使用IMapper實例? –

+0

@AmelSalibasic注入它? – Thijs