首页 > 解决方案 > 如何在 CreateMap 中使用 Automapper IMemberValueResolver 自定义解析器?

问题描述

我正在尝试将一个对象的成员从一个短的?使用 AutoMapper CreateMap.. 使用解析器接口。

我创建了一个 IMemberValueResolver 接口,使用 resolve 函数对接口进行类,然后尝试将 CreateMap 与 opt.MapFrom 和 opt.ResolveUsing 一起使用 - 没有任何效果..

接口和类编译没有错误,但只有 CreateMap 有错误。

尝试了以下文档:http :
//docs.automapper.org/en/stable/Custom-value-resolvers.html http://docs.automapper.org/en/stable/5.0-Upgrade-Guide.html

现在找了 2 天,尝试了我能找到的一切,没有任何效果.. :(

这就是我现在所拥有的。。

接口(IMemberValueResolver.cs):

public interface IMemberValueResolver<in TSource, in TDestination, TSourceMember, TMember>
{
    TMember Resolve(TSource source, TDestination destination, TSourceMember sourceMember, TMember destinationMember, ResolutionContext context);
}

映射器配置(AutoMapperConfig.cs):

public class IsBootstrapResolver : IMemberValueResolver<PageTemplateDataContract, PageTemplateViewModel, short?, bool>
{
    public bool Resolve(PageTemplateDataContract source, PageTemplateViewModel destination, short? sourceMember, bool destMember, ResolutionContext context)
    {
        return sourceMember == 1 ? true : false;
    }
}

//NONE OF THESE WORK!!!!!
public class DataContractToViewModelProfile : Profile
{
    public DataContractToViewModelProfile()
    {
        CreateMap<PageTemplateDataContract, PageTemplateViewModel>().ForMember(dest => dest.IsBootstrapEnable, opt => opt.ResolveUsing<IsBootstrapResolver>().FromMember(x => x.IsBootstrapEnable));
        CreateMap<PageTemplateDataContract, PageTemplateViewModel>().ForMember(dest => dest.IsBootstrapEnable, opt => opt.ResolveUsing(IsBootstrapResolver));
        CreateMap<PageTemplateDataContract, PageTemplateViewModel>().ForMember(dest => dest.IsBootstrapEnable, opt => opt.MapFrom<IsBootstrapResolver, short?>(!?!?!?!));
        CreateMap<PageTemplateDataContract, PageTemplateViewModel>().ForMember(dest => dest.IsBootstrapEnable, opt => opt.MapFrom(new IsBootstrapResolver()));
        CreateMap<PageTemplateDataContract, PageTemplateViewModel>().ForMember(dest => dest.IsBootstrapEnable, opt => opt.ResolveUsing<IsBootstrapResolver>().FromMember(x => x.IsBootstrapEnable));
        CreateMap<PageTemplateDataContract, PageTemplateViewModel>().ForMember(dest => dest.IsBootstrapEnable, opt => opt.ResolveUsing<IsBootstrapResolver, bool>(src => src.IsBootstrapEnable));
    }
}

我期待用短映射的对象?使用自定义解析器将其转换为布尔值。

谢谢!

标签: c#automapper

解决方案


推荐阅读