私は次のようなことができるようにしたい:
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);
つまり、基本的に同じ Method Map(item or a list of items).To(item or list of items) を使用して、エンティティまたはエンティティのリストを DTO または DTO のリストにマッピングできます。また、ProjectDTO と Project の間にマッピングが定義されていない場合は、例外がスローされます。リストを作成するのがもっと複雑な場合は、手動でループするだけで十分です。
Ninject を使用してFrom型とTo型に基づく正しい Mapper ベースを取得する方法がわかりません。私はファクトリを使用して 2 つのタイプに基づいてマッパー ベースを構築することを考えていましたが、それがどのように行われるかはわかりません。
現在、エンティティ/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 テクニックも学びたいと思っています。
ありがとうございました。