在ITypeConverter中使用Automapper

12

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

这一切都很顺利,除了一个用例。我有几个适用于复杂映射的ITypeConverter使用Mapper.Map函数。我该如何解决?以下是我目前正在使用的代码。

静态的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;
    }
}
1个回答

18

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;
    }
}

有没有办法在构造函数中使用IMapper实例? - sensei
@AmelSalibasic 注入它? - Thijs
1
语法在v6中已经改变 - 更多信息请参阅: https://github.com/AutoMapper/AutoMapper/blob/master/docs/Custom-type-converters.md - rboarman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接