Я использую AutoMapper в своем проекте, и мне нужно преобразовать объект домена с включенным объектом в модель представления. Включенный объект является текущим состоянием объекта предметной области, который имеет текущие характеристики объекта. Модель представления имеет свойства характеристик на том же уровне, что и другие свойства (без включенного объекта), потому что я думаю, что это лучшее решение. Я попытался использовать этот код в MapperProfile:
CreateMap<DomainEntity, ViewModel>
.ForMember(...)
...
.ForPath(dest => dest, opt => opt.MapFrom(source =>
Mapper.Map<IncludedEntity, ViewModel>(source.Child)));
Но это решение выдает исключение «Mapper не инициализирован. Вызовите Initialize с соответствующей конфигурацией. Если вы пытаетесь использовать экземпляры mapper через контейнер или иным образом, убедитесь, что у вас нет никаких вызовов статических методов Mapper.Map и если вы используете методы расширения ProjectTo или UseAsDataSource, убедитесь, что вы передаете соответствующий экземпляр IConfigurationProvider."
Я использую экземпляр Autofac и mapper. Как мне это сделать?
ОБНОВЛЕНИЕ
Объект домена:
public class Balloon : BaseIdEntity
{
public int Id { get; set; }
public string FactoryNumber { get; set; }
/// <summary>
/// it's CurrentState of balloon.
/// </summary>
public BalloonSnapshot ActualSnapshot { get; set; }
public int? ActualSnapshotId { get; set; }
}
Текущее состояние:
public class BalloonSnapshot : BaseIdEntity
{
public int Id { get; set; }
/// <summary>
/// It's parent Domaint entity.
/// </summary>
public Balloon Balloon { get; set; }
public int BalloonId { get; set; }
public DateTime Date { get; set; }
}
ViewModel:
public class BalloonDetailDto
{
public int Id { get; set; }
public string FactoryNumber { get; set; }
public DateTime? Date { get; set; }
}
ОБНОВЛЕНИЕ 2
Мои сопоставления:
CreateMap<Balloon, BalloonDetailDto>
.ForPath(dest => dest, opt => opt.MapFrom(source =>
Mapper.Map<BalloonSnapshot, BalloonDetailDto>(source)));
CreateMap<BalloonSnapshot, BalloonDetailDto>()
.ForMember(s => s.Id, opt => opt.Ignore());
Итак, я хочу привести DomaintEntity к одной строке:
var viewModel = _mapper.Map<Balloon, BalloonDetailDto>(balloon);