首页 > 解决方案 > 如何使用 AutoMapper 9.0 在 IValueResolver 中执行自定义映射

问题描述

我正在尝试IValueResolver使用 IoC AutoMapper 样式创建具有嵌套映射但无法将IMapper实例注入解析器的自定义。

下面是解析器的原始版本,其构造函数仍包含 DI IMapper 参数。

有什么方法可以Mapper.Map()在解析器中使用嵌套调用,还是有另一种方法可以达到相同的结果?

不确定这里有多少信息有帮助,但我有多个配置文件添加到Startup.ConfigureServices()usingservices.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;
    }
}

标签: c#automapper

解决方案


推荐阅读