我希望能够做到这样的事情:
FluentMapper m = new FluentMapper();
//some test data
ProjectDTO dto = new ProjectDTO() {...A List of Properties...};
Project entity = new Project();
List<ProjectDTO> listOfDTOs = new List<ProjectDTO>(){dto};
List<Project> listOfEntities = new List<Project>(){entity};
//Mapping from DTO to entity
m.Map<ProjectDTO>(dto).To<Project>(entity);
m.Map<ProjectDTO>(listOfDTOs).To<Project>(listOfEntities);
//and vice versa
m.Map<Project>(entity).To<ProjectDTO>(dto);
m.Map<Project>(listOfEntities).To<ProjectDTO>(listOfDTOs);
即。基本上使用相同的方法图(项目或项目列表).To(项目或项目列表)我可以在实体或实体列表之间映射到DTO或DTO列表。如果ProjectDTO和Project之间没有定义映射,它将抛出异常。如果做一个列表更复杂,我很酷,只需手动循环它们。
我不确定如何使用Ninject在 From 类型和 To 类型上为我提供正确的Mapper。我正在考虑使用工厂来构建基于这两种类型的映射器,但不确定如何做到这一点。
目前我正在使用每个实体/ DTO对的映射器,但是当我需要在类中使用多个映射器时,它会变得笨重,我将在其中注入多个映射器。 我们的Mapper类是这样的(我很乐意改变它可以工作的任何东西)。
public class ProjectMapper<E, D> : IEntityDTOMapper<Project, ProjectDTO>
where E : Project
where D : ProjectDTO
{
public ProjectDTO Map(Project entity)
{
return new ProjectDTO()
{
... Mapping properties...
};
}
public List<ProjectDTO> Map(List<Project> entities)
{
List<ProjectDTO> dtos = new List<ProjectDTO>();
foreach (Project entity in entities)
{
dtos.Add(Map(entity));
}
return dtos;
}
public Project Map(ProjectDTO dto)
{
return new Project()
{
... Mapping properties...
};
}
public List<Project> Map(List<ProjectDTO> dtos)
{
List<Project> entities = new List<Project>();
foreach (ProjectDTO dto in dtos)
{
entities.Add(Map(dto));
}
return entities;
}
我已经考虑过使用AutoMapper了,但这似乎是一种矫枉过正,我也想学习一些先进的Ninject技术。
谢谢。