web-dev-qa-db-fra.com

ResolveUsing manquant dans AutoMapper 8.0

Avant AutoMapper 8.0, j’utilisais ce code:

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();

La documentation indique que vous devez modifier ResolveUsing pour MapFrom, mais le message d'erreur "Aucune propagation Null" s'affiche.

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

Comment je dois le résoudre?

19
Juan Calderon

Remplacez ResolveUsing par MapFrom et ajoutez un paramètre d'entrée supplémentaire au lambda (TDestination).

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

ResolveUsing manquant dans AutoMapper 8.

J'ai également le même problème et j'utilise le prototype suivant de ResolveUsing:

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

Au lieu de remplacer le code existant, j'ai préféré créer une méthode d'extension:

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

Plus tard, dans mon code, j'ai simplement fait référence à l'espace de noms:

using myLibrary.Extensions;

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

J'espère que cela t'aides.

12
Marcello R.

Vous n'avez pas besoin d'utiliser cette expression, vous pouvez "Users.Count" et il retournera 0 si la liste est vide.

1
Ossama Zakaria

Vous pouvez simplement supprimer ResolveUsing (ou MapFrom) et il sera mappé par la convention Users.Count => UsersCount.

0
Lucian Bargaoanu