我正在尝试创建一个自定义IValueResolver
,它具有使用IoC AutoMapper样式的嵌套映射,但是无法将IMapper
实例注入到解析器中。
下面是解析器的原始版本,其构造函数仍包含DI IMapper参数。
是否有某种方法可以使用解析器中的嵌套Mapper.Map()
调用,或者有另一种方法可以实现相同的结果?
不确定这里有多少信息有用,但是我使用Startup.ConfigureServices()
在services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
中添加了多个配置文件
谢谢!
public class PlannedTrainingExerciseDtosResolver : IValueResolver<TrainingPlan, TrainingPlanDto, ICollection<PlannedTrainingExerciseDto>>
{
private Mapper Mapper { get; }
public PlannedTrainingExerciseDtosResolver(IMapper mapper)
{
Mapper = mapper;
}
public ICollection<PlannedTrainingExerciseDto> Resolve(TrainingPlan source, TrainingPlanDto destination, ICollection<PlannedTrainingExerciseDto> destMember, ResolutionContext context)
{
var plannedTrainingExercises = new List<PlannedTrainingExerciseDto>();
foreach (var trainingPlanObjective in source.TrainingPlanObjectives)
{
if (trainingPlanObjective.PlannedTrainingExercises != null)
{
foreach (var exercise in trainingPlanObjective.PlannedTrainingExercises)
{
var exerciseDto = Mapper.Map<PlannedTrainingExerciseDto>(exercise);
exerciseDto.Objective = Mapper.Map<ObjectiveDto>(trainingPlanObjective.Objective);
plannedTrainingExercises.Add(exerciseDto);
}
}
}
return plannedTrainingExercises;
}
}