Получил это, сделав следующее.Во-первых, поскольку DataModel
является базовым классом, я следовал за наследованием отображений автомпера (см. Документы) .Затем, поскольку вы используете экземпляр mapper для сопоставления this.mapper.Map<Movie>(movie)
, конфигурация должна быть также экземпляром, а не статическим, и для этого я использую пакет nuget AutoMapper.Extensions.Microsoft.DependencyInjection
, который позволяет зарегистрировать Automapper с контейнером IoC.
Моя конфигурация выглядит следующим образом (внутри метода ConfigureServices класса Startup).
services.AddAutoMapper(conf =>
{
conf.CreateMap<object, DataModel>()
.ForMember(d => d.Id, opts => opts.Ignore())
.ForMember(d => d.CreatedOn, opts => opts.MapFrom(_ => DateTime.Now))
.ForMember(d => d.ModifiedOn, opts => opts.MapFrom(_ => DateTime.Now))
.ForMember(d => d.DeletedOn, opts => opts.MapFrom(_ => (DateTime?)null))
.ForMember(d => d.IsDeleted, opts => opts.MapFrom(_ => false))
.Include<MovieDto, Movie>();
conf.CreateMap<Movie, MovieDto>();
conf.CreateMap<MovieDto, Movie>();
});
Обратите внимание, что я использовал CreateMap<object, DataModel>
для сопоставления базового класса и просто использовал жестко закодированные значения для дат, чувствуюВы можете свободно настраиваться в соответствии с вашим сценарием.
После внедрения экземпляра IMapper
я смог успешно вызвать this.mapper.Map<Movie>(movie)
.
Надеюсь, это заставит вас двигаться в правильном направлении.