繁体   English   中英

为WCF合同中的通用类型添加AutoMapper类型映射约定

[英]Adding AutoMapper Type Mapping Conventions For Generic Types in WCF Contract

我有一个在其数据协定中使用泛型的WCF服务,例如(简化):

public GetDetails(StatusField<string> status);

现在,WCF通过为泛型中的每个可能的T值创建非泛型等效类型来支持泛型。 因此,对于上面的示例,使用WCF服务的客户端将看到上述函数的以下签名:

public GetDetails(stringStatusField status);
//...

现在,客户端具有StatusField类的通用版本的副本。 我们想在客户端中使用AutoMapper,在这个通用StatusField和WCF上面生成的类型(例如stringStatusField)之间进行映射,以便我们可以调用该服务。 我们可以通过在客户端启动时手动创建映射来完成此操作,如下所示:

Mapper.CreateMap<StatusField<string>, stringStatusField>();

然而,这很费力,因为WCF已经转换了50多个可能的值。 扩展这个想法,我们可以使用反射自动为所有类型创建地图,这是我们目前使用的解决方案。

理想情况下,我希望看到的是一个与AutoMapper架构相关联的解决方案,以避免必须手动进行反射。 从概念上讲,这需要界定AutoMapper将使用以允许它以配合两种类型在一起,类似于它是如何使匹配性能时需要指定定制公约公约的一些方法。 到目前为止,我还没有看到这样做的方法,这是我想在这里回答的问题,如果有人知道如何做到这一点,特别是与上述情况有关。

BTW我知道有些人可能会想到Mapper.DynamicMap()作为这个问题的解决方案。 首先,我们不想使用它,因为它意味着调试可能更难(如其他帖子中的一些类似的指示)以及如果StatusField深度嵌套在传递给WCF方法的对象图中,我不确定此解决方案将起作用,并可能导致类型错误映射和其他此类问题。 如果可能的话,我真的想具体定义允许的映射。

不确定AutoMapper是否提供您所支持的支持,但如果确实如此,则会按照您的建议使用反射。

如果由于性能问题(这应该是一次性启动成本)而反对反射解决方案,那么基于T4模板的代码生成解决方案可能值得考虑吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM