使用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解析器但我怎么做,在哪里做?
您需要的所有信息都在您已经链接的博客文章中给出。要将其分解为绝对最小的信息,您需要这样做:
Mapper.Initialize(x =>
{
x.ConstructServicesUsing(type => kernel.Get(type));
});
在访问任何其他Mapper.
属性/方法之前,所以您需要在访问Mapper.CreateMap
之前调用Mapper.Initialize(..)
。