Я пытаюсь отобразить эталонные объекты данных в dtos, которые оба наследуют из базового базового класса в своем собственном пространстве имен и используют профиль «все цели» для добавления сопоставлений. Рассмотрим следующий код:
namespace Dtos
{
public abstract class ReferenceData<TId>
where TId : Enum
{
public TId Id { get; set; }
public string Description { get; set; }
}
public class ConcreteDto : ReferenceData<MyEnum> { }
}
namespace Entities
{
public abstract class ReferenceData<TId>
where TId : Enum
{
public TId Id { get; set; }
public string Description { get; set; }
}
public class ConcreteEntity : ReferenceData<MyEnum> { }
}
namespace DtoMapping
{
internal abstract class ReferenceDataDtoProfile<TDto, TEntity, TId> : Profile
where TDto : Dtos.ReferenceData<TId>
where TEntity : Entities.ReferenceData<TId>
where TId : Enum
{
public ReferenceDataDtoProfile()
{
}
protected IMappingExpression<TDto, TEntity> CreateDtoToEntityMap()
{
return this.CreateMap<TDto, TEntity>()
.IncludeBase<Dtos.ReferenceData<TId>, Entities.ReferenceData<TId>>();
}
protected IMappingExpression<TEntity, TDto> CreateEntityToDtoMap()
{
return this.CreateMap<TEntity, TDto>()
.IncludeBase<Entities.ReferenceData<TId>, Dtos.ReferenceData<TId>>();
}
protected void CreateMaps()
{
this.CreateDtoToEntityMap();
this.CreateEntityToDtoMap();
}
}
internal sealed class ProfileForConcreteEntity : ReferenceDataDtoProfile<Dtos.ConcreteDto, Entities.ConcreteEntity, MyEnum>
{
public PeriodProfile()
{
this.CreateMaps();
}
}
}
Когда я запускаю приложение и пытаюсь добраться до рассматриваемой конечной точки, я вижу в отладчике, что код класса ReferenceDataDtoProfile выполняется, но затем я получаю исключение, котороедля этих объектов нет сопоставлений, а именно:
InvalidOperationException: отсутствует карта из Dtos.ReferenceData'1 [MyEnum] в Entities.ReferenceData'1 [MyEnum]. Создайте, используя CreateMap (ReferenceData'1, ReferenceData'1).
Как видите, я добавляю метод "IncludeBase" для обоих абстрактных классов ReferenceData, поэтому не понимаю, почему я получаю это исключение.
В мой проект веб-API я включил AutoMapper.Extensions.Microsoft.DependendyInjection пакет версия 7.0.0 .
Спасибо.