所以我要做的就是使用我的DBContext从数据库中获取一些信息以进行映射。
所以我创建了一个自定义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 - getting 'context disposed' error (I know why, but how to fix it?)
我已经尝试了链接中给出的解决方案,但得到了同样的错误。 那么如何让Automapper使用我的Ninject来解决问题?
修改
我也发现这与autofac做同样的事情 http://thoai-nguyen.blogspot.se/2011/10/autofac-automapper-custom-converter-di.html 所以我的猜测是我需要告诉automapper使用我的ninject解析器但是我该怎么做以及在哪里?
答案 0 :(得分:1)
您需要的所有信息都在blog article you already linked中提供。 要将其分解为绝对最小信息,您需要执行以下操作:
Mapper.Initialize(x =>
{
x.ConstructServicesUsing(type => kernel.Get(type));
});
在访问任何其他Mapper.
属性/方法之前,您需要在执行Mapper.Initialize(..)
之前致电Mapper.CreateMap
。