AutoMapper - Как сопоставить конкретный класс домена с унаследованным классом DTO назначения? - PullRequest
2 голосов
/ 13 декабря 2010

У меня есть плоский класс домена, подобный этому:

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 голосов
/ 13 декабря 2010

Вы можете создать свой собственный 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>();
...