具有全局都是全局的客户价值解析器,但仅针对特定地图?

时间:2012-06-06 12:48:41

标签: automapper

对于Mapping中特定类型的每个成员,我想使用我的特定自定义值解析器。

我现在正在这样做的方法是为每个需要它的成员定义这个自定义值解析器。这是当前的代码:

我只想为特定的地图指定这个,但是对于我的所有谷歌搜索和搜索,我找不到解决方案。有任何想法吗?注意:对于所有映射,它不是全局的,仅适用于特定的映射!

这是当前的代码:

Mapper.CreateMap<csp_CheckSLAForPeriodByHour_Result, CheckSlaItem>()
    // make doubles into 0 instead of null
    .ForMember(p => p.Avg_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.avg_ms))
    .ForMember(p => p.Mdn_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.mdn_ms))
    .ForMember(p => p.Sla_i_wefu, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.sla_i_wefu))
    .ForMember(p => p.Sla_iw_efu, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.sla_iw_efu))
    .ForMember(p => p.Std_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.std_ms))
    // make ints into 0 instead of null
    .ForMember(p => p.Min_ms, opt => opt.ResolveUsing<IntValueOrZeroResolver>().FromMember(p => p.min_ms))
    .ForMember(p => p.Max_ms, opt => opt.ResolveUsing<IntValueOrZeroResolver>().FromMember(p => p.max_ms))
    ; 

我想要一些简单的事情:

Mapper.CreateMap<csp_CheckSLAForPeriodByHour_Result, CheckSlaItem>()
.ForAllMembers().OfType(double?).ResolveUsing<DoubleValueOrZeroResolver>()

对此有任何解决方案表示感谢!

Brgds Rickard Robin

2 个答案:

答案 0 :(得分:0)

实际上,这种方式可能不是2年前的情况 所以你可以替换它:

Mapper.CreateMap<csp_CheckSLAForPeriodByHour_Result, CheckSlaItem>()
    // make doubles into 0 instead of null
    .ForMember(p => p.Avg_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.avg_ms))
    .ForMember(p => p.Mdn_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.mdn_ms))
    .ForMember(p => p.Sla_i_wefu, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.sla_i_wefu))
    .ForMember(p => p.Sla_iw_efu, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.sla_iw_efu))
    .ForMember(p => p.Std_ms, opt => opt.ResolveUsing<DoubleValueOrZeroResolver>().FromMember(p => p.std_ms))
    // make ints into 0 instead of null
    .ForMember(p => p.Min_ms, opt => opt.ResolveUsing<IntValueOrZeroResolver>().FromMember(p => p.min_ms))
    .ForMember(p => p.Max_ms, opt => opt.ResolveUsing<IntValueOrZeroResolver>().FromMember(p => p.max_ms))
    ; 

有了这个:

Mapper.CreateMap<csp_CheckSLAForPeriodByHour_Result, CheckSlaItem>()
    // make doubles into 0 instead of null
    .ForAllMembers(opt => opt.ResolveUsing<DoubleValueOrZeroResolver>()); 

映射到csp_CheckSLAForPeriodByHour_Result时,DoubleValueOrZeroResolver的所有成员都将使用CheckSlaItem转换器进行转换。

答案 1 :(得分:-1)

答案是 - 你不能这样做!您必须为每个属性编写上述代码。

我的解决方案是删除AutoMapper,再也不要触摸它。这不值得麻烦,也很难调试。