在基于ASP.Net MVC的应用程序的服务层中,我有一个抽象服务,其设置如下:
public abstract class Service<TEntity, TDto> : IService<TDto>
where TEntity : BaseEntity where TDto : IBaseDto
{
private readonly IUnitOfWork _unitOfWork;
private readonly IGenericRepository<TEntity> _repository;
protected Service(IUnitOfWork unitOfWork, IGenericRepository<TEntity> repository)
{
_unitOfWork = unitOfWork;
_repository = repository;
}
public virtual void Create(TDto entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
//--------------------------------------------------
// HOWTO: Convert from TDto to TEntity
//--------------------------------------------------
_repository.Add(entity);
_unitOfWork.Commit();
}
}
目的是将通用方法保留在此抽象类中,因此我不会在每个实体实现中都重复此操作。
现在的问题是,我需要某种方法将上述TDto
方法中的TEntity
转换为Create(TDto entity)
。我似乎无法弄清楚如何使用AutoMapper做到这一点。
答案 0 :(得分:0)
首先,您应该获得带有DI的映射器实例:
private IMapper _mapper;
protected Service(IUnitOfWork unitOfWork, IGenericRepository<TEntity> repository, IMapper mapper)
{
_unitOfWork = unitOfWork;
_repository = repository;
_mapper = mapper;
}
然后您可以使用_mapper实例将dto映射到您的实体,如下所示:
public virtual void Create(TDto dto)
{
if (dto == null)
{
throw new ArgumentNullException("dto");
}
var entity = _mapper.Map<TEntity>(dto);
_repository.Add(entity);
_unitOfWork.Commit();
}
使用映射器配置类似:
var mapConfig = new MapperConfiguration(config =>
{
config.CreateMap<Models.DtoModel, EntityModel>();
});
mapConfig.AssertConfigurationIsValid();
var iMapper = new Mapper(mapConfig) as IMapper;