在 ITypeConverter 中使用 Automapper

Use Automapper in ITypeConverter

我正在项目中升级 AutoMapper,从静态 Mapper.CreateMap 转换为新方式并在我需要映射的地方注入 IMapper

除一个用例外,一切进展顺利。我有几个用于使用 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;
    }
}