J'ai un service WCF qui utilise des génériques dans son contrat de données, par exemple (simplifié) :
public GetDetails(StatusField status);
Maintenant, WCF prend en charge les génériques en créant un type équivalent non générique pour chaque valeur possible de T dans le générique. Ainsi, pour l'exemple ci-dessus, le client consommant le service WCF verra la signature suivante pour la fonction ci-dessus :
public GetDetails(stringStatusField status);
//...
Maintenant, le client possède une copie de la version générique de la classe StatusField. Nous voulons utiliser AutoMapper dans le client, pour mapper entre ce StatusField générique et les types générés ci-dessus par WCF (comme stringStatusField) afin de pouvoir appeler le service. Nous pourrions le faire en créant manuellement les mappings au démarrage du client, comme ceci :
Mapper.CreateMap, stringStatusField>();
Cependant, c'est laborieux car il y a plus de 50 valeurs possibles de T que WCF a converties. En étendant cette idée, nous pourrions utiliser la réflexion pour créer automatiquement les mappings pour tous les types et c'est la solution que nous utilisons actuellement.
Idéalement, j'aimerais voir une solution qui s'intègre à l'architecture d'AutoMapper pour éviter d'avoir à faire la réflexion manuellement. Conceptuellement, cela nécessiterait une façon de définir une convention qu'AutoMapper utiliserait pour permettre de lier les deux types ensemble, de manière similaire à la façon dont il permet de spécifier des conventions personnalisées lors de la correspondance des propriétés. Jusqu'à présent, je n'ai pas vu de moyen de le faire et c'est la question que j'aimerais voir répondue ici, si quelqu'un sait comment cela peut être fait, en particulier en relation avec le scénario ci-dessus.
Au fait, je suis conscient que certains pourraient penser à Mapper.DynamicMap() comme une solution à ce problème. Tout d'abord, nous ne voulons pas l'utiliser car cela pourrait rendre le débogage potentiellement plus difficile (comme l'ont indiqué certains dans d'autres publications similaires à celle-ci) et aussi si le StatusField est profondément imbriqué dans un graphe d'objets transmis à la méthode WCF, je ne suis pas certain que cette solution fonctionnerait et pourrait potentiellement conduire à un mauvais mappage de types et à d'autres problèmes. J'aimerais vraiment définir de manière concrète les mappings autorisés, si possible.