Automapper ninject 依赖项

Automapper ninject dependencies

我的网站上的 Automapper 有问题,我找不到解决方案。 我创建了一个名为 AutoMapperProfile 的 class,我想将我所有的地图

放在其中
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 可以看到我的地图,但我不确定如何修复它。

您不需要将 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)。