AutoMapper - 如何将具体的域类映射到继承的目标DTO类?

时间:2010-12-13 11:31:46

标签: dns automapper dto

我有一个像这样的扁平域类:

public class ProductDomain
{
    public int ID { get; set; }

    public string Manufacturer { get; set; }

    public string Model { get; set; }

    public string Description { get; set; }

    public string Price { get; set; }
}

我有两个像这样的DTO课程:

public class ProductInfoDTO
{
    public int ID { get; set; }

    public string Manufacturer { get; set; }

    public string Model{ get; set; }
}

public class ProductDTO : ProductInfoDTO
{        
    public string Description { get; set; }

    public string Price { get; set; }
}

现在的问题是:

场景#1:

Mapper.CreateMap<ProductDomain, ProductInfoDTO>() // this mapping works fine

场景#2:

Mapper.CreateMap<ProductDomain, ProductDTO>() // this mapping is not working and throws System.TypeInitializationException

所以我的问题是如何在不破坏源类和目标类的定义的情况下在ProductDomain和ProductDTO(继承ProductInfoDTO)之间创建映射。另外,我不想为域类ProductDomain引入任何新的继承。

由于

1 个答案:

答案 0 :(得分:0)

您可以像这样构建自己的自定义TypeConverter

public class ProductDomainToProductDTOConverter : ITypeConverter<ProductDomain, ProductDTO>
{
    public ProductDTO Convert(ProductDomain source)
    {
        ProductDTO product = new ProductDTO();
        product.Price = source.Price;
        ...

        return product;
    }
}

然后使用您的自定义TypeConverter创建一个地图

Mapper.CreateMap<ProductDomain, ProductDTO>().ConvertUsing<ProductDomainToProductDTOConverter>();