如何使用AutoMapper 9.0在IValueResolver中执行自定义映射

时间:2019-10-31 04:11:06

标签: c# automapper

我正在尝试创建一个自定义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;
    }
}

0 个答案:

没有答案
相关问题