Automapper和Ninject依赖关系

5
我在我的网站上使用的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>();
    }
}

为了便于 DI,我使用 Ninject,因此我已经在 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映射到Slide时,我会收到以下错误提示:
Missing type map configuration or unsupported mapping.

我的最佳猜测是我没有正确绑定,以至于Automapper看不到我的映射,但我不确定该如何解决。

1个回答

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上调用AddProfile方法(如果您决定不使用全局的ConfigurationProviderEngine)。

我们应该在哪个文件中添加以下代码行:Mapper.Engine.ConfigurationProvider.AddProfile<AutoMapperProfile>(); - Zeeshan Ahmad Khalil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接