В AutoMapper 8.0 отсутствует ResolveUsing - PullRequest
0 голосов
/ 05 декабря 2018

До AutoMapper 8.0 я использовал этот код:

CreateMap<ApplicationRole, RoleViewModel>()
.ForMember(d => d.Permissions, map => map.MapFrom(s => s.Claims))
.ForMember(d => d.UsersCount, map => map.ResolveUsing(s => s.Users?.Count ?? 0))
                    .ReverseMap();

В документации сказано, что вы должны изменить ResolveUsing для MapFrom, но у меня появляется ошибка "Нет распространения пусто"

.ForMember(d => d.UsersCount, map => map.MapFrom(s => s.Users?.Count ?? 0))

Как мне это решить?

Ответы [ 4 ]

0 голосов
/ 30 января 2019

В AutoMapper 8.0 отсутствует ResolveUsing

У меня тоже такая же проблема, и я использую следующий прототип ResolveUsing:

void ResolveUsing(Func<TSource, TResult> mappingFunction);

вместозаменив существующий код, я предпочел создать метод расширения:

using System;
using AutoMapper;

namespace myLibrary.Extensions
{
    public static class AutoMapperCompatibilityExtensions
    {
        // Summary:
        //     Resolve destination member using a custom value resolver callback. Used instead
        //     of MapFrom when not simply redirecting a source member This method cannot be
        //     used in conjunction with LINQ query projection
        //
        // Parameters:
        //   resolver:
        //     Callback function to resolve against source type
        public static void ResolveUsing<TSource, TDestination, TMember, TResult>(this IMemberConfigurationExpression<TSource, TDestination, TMember> member, Func<TSource, TResult> resolver) => member.MapFrom((Func<TSource, TDestination, TResult>)((src, dest) => resolver(src)));
    }
}

Позже в своем коде я просто сослался на пространство имен:

using myLibrary.Extensions;

...
    ... map.ResolveUsing(s =>  ...
...

Надеюсь, это поможет.

0 голосов
/ 06 декабря 2018

Вам не нужно использовать это выражение, вы можете использовать «Users.Count», и оно вернет 0, если список пуст.

0 голосов
/ 06 декабря 2018

Вы можете просто удалить ResolveUsing (или MapFrom), и он будет отображен в соответствии с соглашением Users.Count => UsersCount.

0 голосов
/ 06 декабря 2018

Замените ResolveUsing на MapFrom и добавьте еще один входной параметр в лямбду (TDestination).

.ForMember(d => d.UsersCount, map => map.MapFrom((s,d) => s.Users?.Count ?? 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...