C# 在WCF合同中为泛型类型添加自动映射类型映射约定
我有一个WCF服务,它在数据契约中使用泛型,例如(简化): 现在客户端有了StatusField类的通用版本的副本。我们希望在客户机中使用AutoMapper,在这个通用状态字段和上面由WCF生成的类型(例如stringStatusField)之间进行映射,以便调用该服务。我们可以在客户端启动时手动创建映射,如下所示:C# 在WCF合同中为泛型类型添加自动映射类型映射约定,c#,wcf,generics,automapper,conventions,C#,Wcf,Generics,Automapper,Conventions,我有一个WCF服务,它在数据契约中使用泛型,例如(简化): 现在客户端有了StatusField类的通用版本的副本。我们希望在客户机中使用AutoMapper,在这个通用状态字段和上面由WCF生成的类型(例如stringStatusField)之间进行映射,以便调用该服务。我们可以在客户端启动时手动创建映射,如下所示: Mapper.CreateMap<StatusField<string>, stringStatusField>(); Mapper.CreateMap
Mapper.CreateMap<StatusField<string>, stringStatusField>();
Mapper.CreateMap();
然而,这是一项艰巨的工作,因为WCF已经转换了50多个可能的值。扩展这个想法,我们可以使用反射为所有类型自动创建映射,这就是我们目前使用的解决方案
理想情况下,我希望看到的是一个与AutoMapper架构相结合的解决方案,以避免手动进行反射。从概念上讲,这需要某种定义约定的方法,AutoMapper将使用该约定将两种类型绑定在一起,类似于在匹配属性时允许指定自定义约定的方式。到目前为止,我还没有看到一种方法可以做到这一点,这是我想在这里回答的问题,如果有人知道如何做到这一点,特别是在上述情况下
顺便说一句,我知道有些人可能会认为Mapper.DynamicMap()是这个问题的解决方案。首先,我们不想使用它,因为这意味着调试可能会更加困难(正如其他类似文章中所指出的),而且如果StatusField深入嵌套在传递给WCF方法的对象图中,我不确定这个解决方案是否有效,并可能导致类型映射错误和其他类似问题。如果可能的话,我真的很想具体地定义允许的映射。不确定AutoMapper是否提供了您想要的支持,但是如果它提供了,它将按照您的建议使用反射
如果出于性能考虑(这应该是一次性启动成本),您反对反射解决方案,那么基于T4模板的代码生成解决方案可能值得考虑?wcf生成的客户机是一种要求吗?否则可以使用ChannelFactory。完全不反对反射-我们目前使用反射的解决方案效果很好。这个问题更倾向于看是否有人有一个适合AutoMapper框架的解决方案来避免自己编写代码。特别是我希望吉米(汽车制造商的作者)能参与进来,给出一个激动人心的回答;)我相信吉米会感激地得到一个补丁!
public GetDetails(stringStatusField status);
//...
Mapper.CreateMap<StatusField<string>, stringStatusField>();