Передача объектов в AutoMapper Mapping

Я работаю с AutoMapper, и некоторые из значений для отображаемого объекта являются переменными в моем текущем методе. Я пробовал Google, но безрезультатно. Могу ли я передать набор пар KeyValue или объект или что-то в свое сопоставление, чтобы использовать эти значения?

Пример модификации публикации сообщений

//comment variable is a Comment class instance
var imageComment = AutoMapper.Mapper.Map<Data.ImageComment>(comment);
//I want to pass in imageId so I dont have to manually add it after the mapping
imageComment.ImageId = imageId;

Ответы

Ответ 1

AutoMapper обрабатывает этот код пары ключ-значение из коробки.

Mapper.CreateMap<Source, Dest>()
    .ForMember(d => d.Foo, opt => opt.ResolveUsing(res => res.Context.Options.Items["Foo"]));

Затем во время выполнения:

Mapper.Map<Source, Dest>(src, opt => opt.Items["Foo"] = "Bar");

Немного подробный, чтобы вставлять в контекстные элементы, но там вы идете.

Ответ 2

Для Automapper 6.0.2:

Профиль:

public class CoreProfile : Profile
{
    public CoreProfile()
    {
        CreateMap<Source, Dest>()
            .ForMember(d => d.Foo,
                opt => opt.ResolveUsing(
                    (src, dst, arg3, context) => context.Options.Items["Foo"]
                )
            );
    }
}

Mapping:

    var result = Mapper.Map<PlanResult>(aa, opt => {
        opt.Items["Foo"] = 2;
        opt.Items["OtherFoo"] = 1000;
    });

Ответ 3

Предположим, что у вас есть эти два объекта:

public class ObjectA {
 public string Property1 { get; set; }
 public int Property2 { get; set; }
}
public class ObjectB {
 public string Property1 { get; set; }
 public int Property2 { get; set; }
}

И вы хотите скопировать существующий объект типа ObjectA в новый объект типа ObjectB, используя AutoMapper, вы должны сделать это:

var objectA = new ObjectA { Property1 = "Hello, World!", Property2 = 1 }
var objectB = new ObjectB();

// Copy data from a to b
AutoMapper.Mapper
  .CreateMap<ObjectA, ObjectB>()
  .BeforeMap((source, dest) => { dest.ImageId = imageId });
AutoMapper.Mapper.Map(objectA, objectB); // source, destination;

// Or:
var objectB = AutoMapper.Mapper.Map<ObjectB>(objectA);