2015-12-07 63 views
4

我在自己的網站上遇到Automapper問題,找不到解決方案。 我已經創建了一個名爲AutoMapperProfile類,我想將我的所有地圖自動映射器注入依賴關係

public class AutoMapperProfile: Profile 
{ 
    private readonly IConfiguration _mapper; 

    public AutoMapperProfile(IConfiguration mapper) 
    { 
     _mapper = mapper; 
    } 

    protected override void Configure() 
    { 
     base.Configure(); 

     _mapper.CreateMap<SlideDTO, Slide>(); 
     _mapper.CreateMap<Slide, SlideDTO>(); 
    } 
} 

對於我使用Ninject DI目的,所以我在NinjectWebCommon添加以下綁定:

kernel.Bind<IMappingEngine>().ToMethod(ctx => Mapper.Engine); 
kernel.Bind<IConfigurationProvider>().ToMethod(x => Mapper.Engine.ConfigurationProvider); 

控制器看起來是這樣的:

private readonly ISlideRepository slideRepository; 
    private readonly IMappingEngine mappingEngine; 

    public HomeController(
     ISlideRepository slideRepository, 
     IMappingEngine mappingEngine) 
    { 
     this.slideRepository = slideRepository; 
     this.mappingEngine = mappingEngine; 
    } 

    [HttpGet] 
    public ActionResult Index() 
    { 
     var model = new IndexViewModel(); 
     var slide = slideRepository.GetSlide(); 
     model.Slide = mappingEngine.Map<SlideDTO, Slide>(slide); 

     return View(model); 
    } 

當我從SlideDTO映射到幻燈片,我得到以下錯誤:

Missing type map configuration or unsupported mapping. 

所以我最好的猜測是我沒有正確地進行綁定,以便Automapper可以看到我的地圖,但我不確定我該如何解決它。

回答

1

您不需要將IConfiguration注入AutoMapperProfile,它已經從Profile繼承了CreateMap方法。

確保AutoMapperProfile有一個參數的構造函數是這樣的:

public class AutoMapperProfile : Profile 
{ 
    protected override void Configure() 
    { 
     this.CreateMap<SlideDTO, Slide>(); 
     this.CreateMap<Slide, SlideDTO>(); 
    } 
} 

然後你需要確保AutoMapper知道這個配置文件,這裏是你如何能做到這一點:

Mapper.Engine.ConfigurationProvider.AddProfile<AutoMapperProfile>(); 

請注意,您可以在任何IConfigurationProvider(如果您決定不使用全球ConfigurationProviderEngine)調用AddProfile方法。