Как использовать собственный преобразователь Automapper IMemberValueResolver в CreateMap? - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь преобразовать элемент объекта из короткого замыкания? в bool, используя AutoMapper CreateMap .. используя интерфейс распознавателя.

Я создал интерфейс IMemberValueResolver, класс для интерфейса с функцией разрешения, а затем попытался использовать 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);
}

Конфигурация Mapper (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));
    }
}

Я ожидаю, что объект сопоставлен с коротким замыканием? конвертируется в логическое значение с помощью специального распознавателя.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...