Automapper:将TypeConverter定位到特定对象
我使用Automapper将一个对象转换为另一个对象,如下所示:
Mapper.Initialize(cfg =>
{
cfg.RecognizePrefixes("m_n", "m_b", "m_l", "m_ach", "m_wz", "m_sz");
cfg.CreateMap<short[], string>().ConvertUsing(new ShortArrayTypeConverter());
cfg.CreateMap<int, DateTime>().ConvertUsing(new DateTimeTypeConverter());
cfg.CreateMap<SUserInfoApiV4, UserInfo>();
});
Mapper.AssertConfigurationIsValid();
当我想将SUserInfoApiV4映射到UserInfo时,这很好用。 不过,我也需要转换其他对象,甚至做相反的事情(像UserInfo到SUserInfoApiV4中)。
这是我遇到问题的地方。 类型转换器是全球性的,不受特定对象的束缚。 我试图通过使用这样的配置文件来解决这个问题:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<SUserInfoApiV4, UserInfo>();
cfg.AddProfile<SUserInfoApiV4Profile>();
cfg.CreateMap<UserInfo, SUserInfoApiV4> ();
cfg.AddProfile<UserInfoProfile>();
});
Mapper.AssertConfigurationIsValid();
然后添加以下配置文件:
public class SUserInfoApiV4Profile : Profile
{
public SUserInfoApiV4Profile()
{
CreateMap<short[], string>().ConvertUsing(new ShortArrayTypeConverter());
CreateMap<int, DateTime>().ConvertUsing(new IntDateTimeTypeConverter());
}
}
public class UserInfoProfile : Profile
{
public UserInfoProfile()
{
CreateMap<string, short[]>().ConvertUsing(new StringTypeConverter());
CreateMap<DateTime, int>().ConvertUsing(new DateTimeIntTypeConverter());
}
}
然而,它似乎并没有像预期的那样工作(或者我认为)。 有没有办法将类型转换器关联到特定对象,所以我不必手动转换每个成员?
编辑:我在一段时间后发现了这个话题:客户价值解析器与全球automapper,但只为特定的地图?
所以我想这是不可能的,我必须手动映射每个领域。 现在我不明白为什么我应该首先使用AutoMapper。
链接地址: http://www.djcxy.com/p/37361.html