使用Ninject和Fluent API在Entity和DTO之间进行映射

时间:2012-10-31 20:29:17

标签: ninject fluent-interface

我希望能够做到这样的事情:

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技术。

谢谢。

0 个答案:

没有答案