我有一个像这样的复杂对象:
public class BusinessUnit
{
public TradingDesk TradingDesk { get; }
public string Division { get; }
public BusinessUnit(string division, TradingDesk tradingDesk)
{
Division = division;
TradingDesk = tradingDesk;
}
}
我想将此映射到平面类型:
public class Row
{
//TradingDesk properties
public string TraderFirstName { get; set; }
public string TraderLastName { get; set; }
public string TradingDeskName { get; set; }
public string Division { get; set; }
}
我已经为 TradingDesk
配置了 AutoMapper
:
CreateMap<TradingDesk, Row>().ForMember(vm => vm.TradingDeskName, op => op.MapFrom(src => src.Name));
那么接下来的测试已经通过:
[Test]
public void Should_Map_TradingDesk_To_Row()
{
var tradingDesk = Fixture.Create<TradingDesk>();
var mapped = AutoMapper.Map<Row>(tradingDesk);
mapped.TradingDeskName.Should()
.Be(tradingDesk.Name);
mapped.TraderFirstName.Should()
.Be(tradingDesk.Trader.FirstName);
mapped.TraderLastName.Should()
.Be(tradingDesk.Trader.LastName);
}
但是,当我尝试将 BusinessUnit
映射到 Row
时,我必须重新配置 AutoMapper
来适用于 TradingDesk
,如下所示:
CreateMap<BusinessUnit, Row>()
.ForMember(vm => vm.TradingDeskName, op => op.MapFrom(src => src.TradingDesk.Name))
.ForMember(vm => vm.TraderFirstName, op => op.MapFrom(src => src.TradingDesk.Trader.FirstName))
.ForMember(vm => vm.TraderLastName, op => op.MapFrom(src => src.TradingDesk.Trader.LastName));
我希望AutoMapper
在需要将TradingDesk
映射到Row
并映射BusinessUnit
时,应该使用已配置的源和目标类型映射。这样,我可以从最小的类型开始构建配置,一步步展开复杂对象,而不必为平展后的每个成员定义映射。