我正在项目中升级 AutoMapper,从静态 Mapper.CreateMap
转换为新方式,并在我需要映射的地方注入(inject)一个 IMapper
。
除一个用异常(exception),一切进展顺利。我有几个用于使用 Mapper.Map
函数的复杂映射的 ITypeConverter
。我怎样才能解决这个问题?以下是我目前正在使用的代码。
静态 Mapper.Map
找不到我定义的映射,因为它们不是使用静态方法创建的。
public partial class ApplicationMappingsProfile
{
private void RegisterMappings()
{
CreateMap<Application, AppDto>()
.ConvertUsing<ApplicationTypeConverter>();
}
}
private class ApplicationTypeConverter : ITypeConverter<App, AppDto>
{
public AppDto Convert(ResolutionContext context)
{
var src = context.SourceValue as App;
if (src == null)
{
return null;
}
var dto = Mapper.Map<App, AppDto>(src);
dto.property = Mapper.Map<Property>(src.SomeProperty);
return result;
}
}
最佳答案
ResolutionContext
包含对当前映射引擎的引用。将 Mapper.Map
切换为 context.Engine.Mapper.Map
就可以了。
public partial class ApplicationMappingsProfile
{
private void RegisterMappings()
{
CreateMap<Application, AppDto>()
.ConvertUsing<ApplicationTypeConverter>();
}
}
private class ApplicationTypeConverter : ITypeConverter<App, AppDto>
{
public AppDto Convert(ResolutionContext context)
{
var src = context.SourceValue as App;
if (src == null)
{
return null;
}
var dto = Mapper.Map<App, AppDto>(src);
dto.property = context.Engine.Mapper.Map.Map<Property>(src.SomeProperty);
return result;
}
}
关于c# - 在 ITypeConverter 中使用 Automapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796295/