C# 在AutoMapper中,可以将相同的值解析器应用于多个成员吗

C# 在AutoMapper中,可以将相同的值解析器应用于多个成员吗,c#,automapper,C#,Automapper,我有一些映射代码如下 Mapper.CreateMap<CalculationQueryResult, CalculationViewModel>() .ForMember(poco => poco.NomineeFee, opt => opt.ResolveUsing<FormattedCurrencyInt>() .FromMember(m => m.NomineeFee))

我有一些映射代码如下

Mapper.CreateMap<CalculationQueryResult, CalculationViewModel>()
       .ForMember(poco => poco.NomineeFee, 
                   opt => opt.ResolveUsing<FormattedCurrencyInt>()
         .FromMember(m => m.NomineeFee))

       .ForMember(poco => poco.TotalContributions, 
                   opt => opt.ResolveUsing<FormattedCurrencyInt>()
         .FromMember(m => m.TotalContributions))

       .ForMember(poco => poco.EquityInjection, 
                   opt => opt.ResolveUsing<FormattedCurrencyInt>()
         .FromMember(m => m.EquityInjection))

  // ... SNIP Lots more members mapped with Formatted Currency Resolver
Mapper.CreateMap()
.FormMember(poco=>poco.N),
opt=>opt.resolvesusing()
.FromMember(m=>m.Fee))
.FormMember(poco=>poco.TotalContributions,
opt=>opt.resolvesusing()
.FromMember(m=>m.TotalContributions))
.FormMember(poco=>poco.EquityInjection,
opt=>opt.resolvesusing()
.FromMember(m=>m.EquityInjection))
// ... 剪切更多使用格式化货币解析程序映射的成员
如您所见,我使用同一个解析器映射多个成员,以将整数转换为格式化的货币字符串。我这样做是为了我的poco班上绝大多数但不是所有的成员

如果我不需要重复这些类型,所有这些成员都将使用基于约定的映射进行映射。为一个简单的任务编写大量的代码

是否有任何方法可以覆盖将int转换为单个映射的字符串的默认行为,然后在需要不同内容的地方执行custom.ForMembers。例如:

Mapper.CreateMap<CalculationQueryResult, CalculationViewModel>()
            .SetDefault<int,string>(opt => opt.ResolveUsing<FormattedCurrencyInt>())
            .ForMember(poco => poco.Count, x=>x.MapFrom(s => s.Count.ToString()));
Mapper.CreateMap()
.SetDefault(opt=>opt.ResolveUsing())
.ForMember(poco=>poco.Count,x=>x.MapFrom(s=>s.Count.ToString());

您可以按以下方式创建默认映射:

Mapper.CreateMap<int, string>().ConvertUsing<FormattedCurrencyIntConverter>();

private class FormattedCurrencyIntConverter : TypeConverter<int, string> {
    protected override string ConvertCore(int numericValue) {
        return numericValue.ToString("C2");  // format here ...
    }
}
Mapper.CreateMap().ConvertUsing();
私有类FormattedCurrencyIntConverter:TypeConverter{
受保护的重写字符串转换核心(int numericValue){
返回numericValue.ToString(“C2”);//此处的格式。。。
}
}
但请注意,此映射规则将应用于所有整数!对某些成员重写此规则可能是可能的,但我没有测试它


PS:我建议明确地写下所有映射规则,不要依赖基于约定的映射。如果仅在一侧重命名属性,则基于约定的映射将中断,但IDE可以自动重构显式规则。

不能按所述方式将同一值解析程序应用于多个成员

它可以覆盖所有映射从int到string的默认映射,正如georgpatscheider所建议的那样,但这可能会产生比原始问题更严重的副作用


您必须逐行写出地图。

感谢您发布答案,正如您所说,这将把转换应用到所有对我没有帮助的地图上。我想将其应用于特定地图。请使用问题上的编辑链接添加其他信息。回答后按钮只能用于完整回答问题。-有时答案是“那是不可能的”。这个答案并没有给我的问题增加任何额外的内容。另一个答案也不能回答我的问题。那么,如果答案没有添加任何内容,你为什么要发布它呢?我们中的一些人会回顾低质量的答案并对其进行评论。这就是这个网站工作原理的一部分,我建议你解释一下为什么你认为这只是一个观点,每个人都会有这样的观点。“我想我能飞”是我可以说的话,不加赘述,可能是真的,也可能是假的。如果我在直升机或飞机上,那么我可能会飞得很好,而如果我试图挥动手臂飞行,那就不太好了,这就是原因。我已经按照要求扩展了答案。我认为“那是不可能的”答案确实增加了价值,当上下文是问题时,有一个答案没有解决问题,还有一个没有帮助的“PS…”