Dans le projet sur lequel je travaille, nous mappons les DTO générés automatiquement aux objets métier. La base de données a une convention de dénomination inhabituelle (mais largement cohérente), ce qui signifie qu'il est possible de transformer la plupart des noms de propriété DTO en noms de propriété d'objet métier équivalents, sauvant ainsi de nombreuses lignes de code. Par exemple, dans le DTO (et la base de données), nous avons une propriété appelée account_ID__created
qui sera mappée à une propriété BO appelée CreatedAccountId
. C'est le genre de transformation qui se passe dans MemberNameTransformer.GetBoMemberName()
, donc ce n'est pas aussi simple qu'une convention légèrement différente avec un séparateur différent.Comment puis-je configurer AutoMapper pour gérer une convention de dénomination personnalisée?
Après ce que j'ai disponible dans le code source AutoMapper, j'ai ce que ma meilleure estimation:
public class DtoBoMappingOptions : IMappingOptions
{
public INamingConvention SourceMemberNamingConvention
{
get { return new PascalCaseNamingConvention(); }
set { throw new NotImplementedException(); }
}
public INamingConvention DestinationMemberNamingConvention
{
get { return new PascalCaseNamingConvention(); }
set { throw new NotImplementedException(); }
}
public Func<string, string> SourceMemberNameTransformer
{
get { return s => s; }
set { throw new NotImplementedException(); }
}
public Func<string, string> DestinationMemberNameTransformer
{
get { return MemberNameTransformer.GetBoMemberName; }
set { throw new NotImplementedException(); }
}
}
Maintenant, comment puis-je dire le mappeur d'utiliser ces options lors du mappage SomeDto à SomeBusinessClass? Je me rends compte que je peux avoir la mauvaise interface dans IMappingOptions. La vraie viande de ce que j'essaie d'accomplir est en MemeberNameTransformer.GetBoMemberName()
.
Crédit supplémentaire: Comment puis-je dire le mappeur d'utiliser ces options lors du mappage une à IBusinessObject ID photopour?
Je ne pense pas que cela fonctionnera pour ce dont j'ai besoin. J'ai mis à jour la question pour refléter exactement la convention de nommage avec laquelle je travaille. J'ai vraiment besoin de mon Func pour dire quel membre de destination vient de quel membre source. –
@Josh Kodroff vérifier la réponse mise à jour, je pense que ce sera ce dont vous avez besoin. – Jab
C'est tout! Je ne pouvais juste pas savoir où placer le SourceMemberNameTransformer. Maintenant, j'utilise le Mapper dans plusieurs couches (DTO, BO, VM), donc je ne veux pas utiliser ce transformateur universellement. Des idées sur la façon de s'assurer que cela n'arrive pas? –