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
方法(如果您决定不使用全局 ConfigurationProvider
和 Engine
)。
我的网站上的 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
方法(如果您决定不使用全局 ConfigurationProvider
和 Engine
)。