加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在ITypeConverter中使用Automapper

发布时间:2020-12-15 08:33:59 所属栏目:百科 来源:网络整理
导读:我正在一个项目中升级AutoMapper,从静态Mapper.CreateMap转换为新方式并注入我需要映射的IMapper. 除了一个用例外,这很好.我有几个用于复杂映射的ITypeConverters,它们使用Mapper.Map函数.我怎样才能解决这个问题?下面是我目前正在使用的代码. 静态Mapper.M
我正在一个项目中升级AutoMapper,从静态Mapper.CreateMap转换为新方式并注入我需要映射的IMapper.

除了一个用例外,这很好.我有几个用于复杂映射的ITypeConverters,它们使用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;
    }
}

解决方法

ResolutionContext包含对当前Mapping引擎的引用.使用context.Engine.Mapper.Map切换Mapper.Map,你很高兴.
public partial class ApplicationMappingsProfile
{
    private void RegisterMappings()
    {
        CreateMap<Application,AppDto>(src);
        dto.property = context.Engine.Mapper.Map.Map<Property>(src.SomeProperty);

        return result;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读