Как передать значение, полученное в результате вызова функции из ForMember (), в другое с помощью AutoMapper - PullRequest
2 голосов
/ 27 июня 2019

Вкл. CreateMap () Я хотел бы использовать возвращаемое значение из вызова функции в ForMember () , чтобы избежать необходимости дважды вызывать одну и ту же функцию.

CreateMap<source, destination>()
                .ForMember(dest => dest.Variable2, opt => opt.MapFrom(src => testFunction(src.Variable1))
                .ForMember(dest => dest.Variable3, opt => opt.MapFrom(src => testFunction(src.Variable1));

1 Ответ

1 голос
/ 29 июня 2019

Вы можете влиять на порядок отображения свойств с помощью SetMappingOrder.

Убедитесь, что например. свойство Variable2 сопоставляется посредством вызова testFunction до сопоставления свойства Variable3.
После этого свойство Variable3 может быть сопоставлено со значением, уже установленным в свойстве Variable2.

Для этого установите порядок отображения Variable2, например, на. 1 и присвойте одному из Variable3 более высокое значение, например. 2.

В приведенном ниже примере показано, что testFunction был выполнен только один раз, поскольку Variable2 и Variable3 присвоено одинаковое значение Guid.

var config = new MapperConfiguration(cfg => { 

    cfg.CreateMap<Source, Destination>()
        .ForMember(
            dest => dest.Variable2, 
            opt => {
                opt.SetMappingOrder(1); // Will be mapped first.
                opt.MapFrom(src => testFunction(src.Variable1));
            })
        .ForMember(
            dest => dest.Variable3, 
            opt => {
                opt.SetMappingOrder(2); // Will be mapped second.
                opt.MapFrom((src, dest) => dest.Variable2);
            });
    });

IMapper mapper = new Mapper(config);

var source = new Source {
    Variable1 = "foo"
    };

var destination = mapper.Map<Destination>(source);

Console.WriteLine($"variable2: {destination.Variable2}");
Console.WriteLine($"variable3: {destination.Variable3}");

// variable2: FOO 377dd1f8-ec1e-4f02-87b6-64f0cc47e989
// variable3: FOO 377dd1f8-ec1e-4f02-87b6-64f0cc47e989

public string testFunction(String arg)
{   
    return $"{arg.ToUpper()} {Guid.NewGuid()}";
}

public class Source
{
    public String Variable1 { get; set; }
}

public class Destination
{
    public String Variable2 { get; set; }
    public String Variable3 { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...