我有一个模型类:
public class Model {
public int Id {get;set;}
public string Name {get;set;}
}
和视图模型:
public class ViewModel {
public string Name {get;set;}
}
我想将List映射到Dictionary,其中键将是Model.Id。
我已经开始这样的配置:
configuration
.CreateMap<Model, KeyValuePair<int, ViewModel>>()
.ConstructUsing(
x =>
new KeyValuePair<int, ViewModel>(x.Id, _mapper.Map<ViewModel>(x)));
但是我不想在配置中使用mapper实例。还有其他方法可以做到这一点吗?我已经看到了一些答案,人们使用x.MapTo(),但这似乎不再可用了…
您可以使用来自lambda参数x.Engine.Mapper
的mapper实例
就这么简单
configuration
.CreateMap<Model, KeyValuePair<int, ViewModel>>()
.ConstructUsing(context => new KeyValuePair<int, ViewModel>(
((Model)context.SourceValue).Id,
context.Engine.Mapper.Map<ViewModel>(context.SourceValue)));
@hazevich提供的解决方案在5.0更新后停止工作。这是可行的解决方案。
您需要创建类型转换器:
public class ToDictionaryConverter : ITypeConverter<Model, KeyValuePair<int, ViewModel>>
{
public KeyValuePair<int, ViewModel> Convert(Model source, KeyValuePair<int, ViewModel> destination, ResolutionContext context)
{
return new KeyValuePair<int, ViewModel>(source.Id, context.Mapper.Map<ViewModel>(source));
}
}
,然后在配置中使用:
configuration
.CreateMap<Model, KeyValuePair<int, ViewModel>>()
.ConvertUsing<ToDictionaryConverter>();