使用automapper和ninject使用DBContext查找创建map

本文关键字:使用 创建 map 查找 ninject automapper DBContext | 更新日期: 2023-09-27 18:18:33

所以我想做的是使用我的DBContext从DB获取映射的一些信息。

所以我创建了一个自定义TypeConverter:
public class RoundVMtoTrampetRound : ITypeConverter<RoundVM, TrampetRound>
{
    public RoundVMtoTrampetRound(DBTariff context)
    {
        this.context = context;
    }
    private DBTariff context { get; set; }
    public TrampetRound Convert(ResolutionContext context)
    {
        RoundVM source = (RoundVM)context.SourceValue;
        Mapper.CreateMap<RoundVM, TrampetRound>();
        var dest = Mapper.Map<TrampetRound>(source);
        dest.Difficulty = this.context.DifficultyTrampet.Find(source.Id);
        return dest;
    }
}
在我的控制器中,我创建了一个映射器,使用:
Mapper.CreateMap<RoundVM, TrampetRound>().ConvertUsing<RoundVMtoTrampetRound>();

但是当我做映射时,我得到错误消息说没有默认构造函数。但我想ninject为我做这个代码:

kernel.Bind<DBTariff>().ToSelf().InRequestScope();

答案在这里,但我仍然得到同样的问题Automapper + EF4 + ASP. NET MVC - get 'context dispose '错误(我知道为什么,但如何修复它?)

我已经尝试了在链接中给出的解决方案,但得到同样的错误。那么我如何让Automapper使用我的Ninject来解决这个问题?

编辑

我也发现了同样的事情是用autoface完成的http://thoai-nguyen.blogspot.se/2011/10/autofac-automapper-custom-converter-di.html我的猜测是,我需要告诉automapper使用我的ninject解析器但我怎么做,在哪里做?

使用automapper和ninject使用DBContext查找创建map

您需要的所有信息都在您已经链接的博客文章中给出。要将其分解为绝对最小的信息,您需要这样做:

Mapper.Initialize(x =>
{
     x.ConstructServicesUsing(type => kernel.Get(type));
});

在访问任何其他Mapper.属性/方法之前,所以您需要在访问Mapper.CreateMap之前调用Mapper.Initialize(..)