Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WCF合同中为泛型类型添加自动映射类型映射约定_C#_Wcf_Generics_Automapper_Conventions - Fatal编程技术网

C# 在WCF合同中为泛型类型添加自动映射类型映射约定

C# 在WCF合同中为泛型类型添加自动映射类型映射约定,c#,wcf,generics,automapper,conventions,C#,Wcf,Generics,Automapper,Conventions,我有一个WCF服务,它在数据契约中使用泛型,例如(简化): 现在客户端有了StatusField类的通用版本的副本。我们希望在客户机中使用AutoMapper,在这个通用状态字段和上面由WCF生成的类型(例如stringStatusField)之间进行映射,以便调用该服务。我们可以在客户端启动时手动创建映射,如下所示: Mapper.CreateMap<StatusField<string>, stringStatusField>(); Mapper.CreateMap

我有一个WCF服务,它在数据契约中使用泛型,例如(简化):

现在客户端有了StatusField类的通用版本的副本。我们希望在客户机中使用AutoMapper,在这个通用状态字段和上面由WCF生成的类型(例如stringStatusField)之间进行映射,以便调用该服务。我们可以在客户端启动时手动创建映射,如下所示:

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>();