Передача объектов в 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);