Automapper настраиваемое встроенное отображение - PullRequest
2 голосов
/ 04 февраля 2020

У меня есть два класса

 public class SourceClass
{
    public Guid Id { get; set; }
    public Guid Provider { get; set; }
}


public class DestinationClass
{
    public Guid Id { get; set; }
    public Guid Provider { get; set; }
    public Guid CustomerId {get; set;}
}

Я инициализировал свое отображение, используя следующий код

CreateMap<SourceClass, DestinationClass>();

И затем в моем контроллере у меня есть:

Mapper.Map<List<DestinationClass>>(requests)

где «запросы» - это список объектов SourceClass, передаваемых моему контроллеру.

Теперь этот код работает и отображение работает в соответствии с настройками. Тем не менее, я также получил CustomerId и хочу установить его в DestinationClass соответственно.

Есть ли способ сделать это, когда происходит сопоставление, так что мне не нужно писать дополнительный l oop для установки CustomerId в каждом объекте в списке?

1 Ответ

2 голосов
/ 05 февраля 2020

Вы можете передать дополнительный параметр, передав key-value мапперу (как предложено @LucianBargaoanu). Пользовательский преобразователь значений и выполнение карты могут быть реализованы следующим образом:

// Configuration 
var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<SourceClass, DestinationClass>()
      .ForMember(dest => dest.CustomerId, opt => 
      opt.MapFrom((src, dest, destMember, context) =>
      context.Items["CustomerId"]));
});

var mapper = configuration.CreateMapper();

//Sample source class
var sourceClass = new SourceClass { Id = Guid.NewGuid(), Provider = Guid.NewGuid() };

var destClass = mapper.Map<SourceClass, DestinationClass>(sourceClass,
              opt => opt.Items["CustomerId"] = "96b4b6e6-7937-4579-ba01-4a051bc0b93b");

Член CustomerId объекта destClass заполняется переданным GUID.

Примечание: SourceClass и DestinationClass определения взяты из OP.

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