【发布时间】:2016-09-01 12:31:06
【问题描述】:
我需要使用 AutoMapper 将一个对象映射到另一个对象。棘手的问题是如何访问映射配置内部或自定义类型转换器内部的映射器实例(IMapper 的实例)?
下面的代码不起作用,但它是我想要实现的示例 - 请注意 mapper.Map 调用并假设映射 Customer => CustomerDto 和 Customer => DetailedCustomerDto 已定义。
var config = new MapperConfiguration(
cfg => cfg.CreateMap<Order, OrderDto>()
.ForMember(dst => dst.Customer, src => src.ResolveUsing(o => {
return o.Type == 1
? mapper.Map<Customer, CustomerDto>(o.Customer)
: mapper.Map<Customer, DetailedCustomerDto>(o.Customer)
})
);
客户端部分是:
var mapper = config.CreateMapper();
var orderDto = mapper.Map<Order, OrderDto>(order);
我要映射的对象的简化版本是:
public class Order
{
public int Type { get; set; }
public Customer Customer { get; set; }
}
public class Customer
{
public long Id { get; set; }
public string Name { get; set; }
}
public class OrderDto
{
public CustomerDto Customer { get; set; }
}
public class CustomerDto
{
public long Id { get; set; }
}
public class DetailedCustomerDto : CustomerDto
{
public string Name { get; set; }
}
从上面的代码可以看出,根据Order.Type 的值,映射器应该将属性Order.Customer 映射到不同的目标。由于一个目标 (DetailedCustomerDto) 从另一个目标 (CustomerDto) 继承,这就有点棘手了。
请注意,不能使用已过时且已弃用的静态方法 Mapper.Map。
【问题讨论】:
标签: c# .net mapping automapper