Comment travailler avec AutoMapper en C #

AutoMapper est une bibliothèque de mappage objet à objet populaire qui peut être utilisée pour mapper des objets appartenant à des types différents. Par exemple, vous devrez peut-être mapper les DTO (Data Transfer Objects) de votre application aux objets de modèle. AutoMapper vous évite l'effort fastidieux d'avoir à mapper manuellement une ou plusieurs propriétés de ces types incompatibles.

Pour commencer à travailler avec AutoMapper, vous devez créer un projet dans Visual Studio, puis installer AutoMapper. Vous pouvez installer AutoMapper à partir de NuGet à l'aide de la commande suivante dans la fenêtre NuGet Package Manager Console:

PM> AutoMapper du package d'installation

Créer des mappages à l'aide d'AutoMapper

Un mappeur objet à objet tel qu'AutoMapper convertit un objet d'entrée d'un type en un objet de sortie d'un autre type. Considérez les deux classes suivantes.

 classe publique AuthorModel

    {

        public int Id

        {

            avoir; ensemble;

        }

        chaîne publique FirstName

        {

            se mettre;

        }

        chaîne publique LastName

        {

            avoir; ensemble;

        }

        chaîne publique Adresse

        {

            avoir; ensemble;

        }

    }

 classe publique AuthorDTO

    {

        public int Id

        {

            avoir; ensemble;

        }

        chaîne publique FirstName

        {

            avoir; ensemble;

        }

        chaîne publique LastName

        {

            avoir; ensemble;

        }

        chaîne publique Adresse

        {

            avoir; ensemble;

        }

    }

L'extrait de code suivant montre comment créer une carte entre ces deux types, AuthorModel et AuthorDTO.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

Ensuite, effectuer le mappage entre les types est aussi simple que le montre le morceau de code suivant.

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

var destination = iMapper.Map (source);

Un exemple d'AutoMapper 

Travaillons maintenant avec quelques données. Reportez-vous au morceau de code suivant qui stocke certaines données dans l'objet source, puis affiche les valeurs de propriété dans l'objet de destination une fois le mappage effectué.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

source.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "Inde";

var destination = iMapper.Map (source);

Console.WriteLine ("Nom de l'auteur:" + destination.FirstName + "" + destination.LastName);

Lorsque vous exécutez le morceau de code ci-dessus, le nom de l'auteur stocké dans l'objet de destination sera affiché. Cependant, les valeurs des propriétés FirstName de destination et LastName de destination seront les mêmes que celles de l'objet source car vous avez mappé les objets avec succès à l'aide de l'AutoMapper!

Notez qu'AutoMapper peut mapper n'importe quel ensemble de classes. Cependant, AutoMapper suit certaines conventions, dont l'une est que les noms de propriété mappés doivent avoir des noms identiques. Si les noms de propriété ne sont pas identiques, vous devez indiquer à AutoMapper comment les propriétés doivent être mappées. En supposant que nous souhaitons mapper les deux propriétés Contact et ContactDetails, l'exemple suivant illustre comment cela peut être réalisé.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                .ForMember (destination => destination.ContactDetails,

               opts => opts.MapFrom (source => source.Contact));

            });

Notez l'instruction suivante utilisée pour créer l'objet de destination.

var destination = iMapper.Map (source);

Si l'objet de destination existe déjà, vous pouvez utiliser l'instruction ci-dessous à la place.

iMapper.Map (sourceObject, destinationObject);

En substance, l'extrait de code ci-dessus peut être utilisé pour mapper deux objets qui existent déjà.

Utilisation de projections dans AutoMapper

AutoMapper fournit un excellent support pour les projections. Les projections sont utilisées pour mapper les valeurs source à une destination qui ne correspond pas à la structure de la source. (En revanche, le mappage dont nous avons discuté ci-dessus était un mappage un à un.)

Regardons maintenant une projection. Par exemple, considérez la classe suivante.

 Adresse de classe publique

    {

        chaîne publique City {get; ensemble; }

        chaîne publique State {get; ensemble; }

        chaîne publique Country {get; ensemble; }

    }

Faisons en sorte que notre classe AuthorModel utilise la classe Address pour stocker les informations d'adresse des auteurs. Voici à quoi ressemblerait la classe AuthorModel mise à jour.

 classe publique AuthorModel

    {

        public int Id

        {

            avoir; ensemble;

        }

        chaîne publique FirstName

        {

            se mettre;

        }

        chaîne publique LastName

        {

            avoir; ensemble;

        }

        Adresse publique

        {

            avoir; ensemble;

        }

    }

 Et voici la classe AuthorDTO mise à jour.

classe publique AuthorDTO

    {

        public int Id

        {

            avoir; ensemble;

        }

        chaîne publique FirstName

        {

            avoir; ensemble;

        }

        chaîne publique LastName

        {

            avoir; ensemble;

        }

        chaîne publique City {get; ensemble; }

        chaîne publique State {get; ensemble; }

        chaîne publique Country {get; ensemble; }

    }

Supposons maintenant que nous devions mapper les classes AuthorDTO et AuthorModel. L'extrait de code suivant illustre comment cela peut être réalisé.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                   .ForMember (destination => destination.Address,

              map => map.MapFrom (

                  source => nouvelle adresse

                  {

                      Ville = source .Ville,

                      State = source .State,

                      Pays = source.

                  }));

Je discuterai des fonctionnalités plus avancées d'AutoMapper dans un prochain article ici. D'ici là, vous pouvez en savoir plus sur AutoMapper à ce lien.

Comment faire plus en C #:

  • Quand utiliser une classe abstraite ou une interface en C #
  • Comment travailler avec AutoMapper en C #
  • Comment utiliser les expressions lambda en C #
  • Comment travailler avec les délégués Action, Func et Predicate en C #
  • Comment travailler avec des délégués en C #
  • Comment implémenter un simple logger en C #
  • Comment travailler avec des attributs en C #
  • Comment travailler avec log4net en C #
  • Comment implémenter le modèle de conception de référentiel en C #
  • Comment travailler avec la réflexion en C #
  • Comment travailler avec Filesystemwatcher en C #
  • Comment effectuer une initialisation différée en C #
  • Comment travailler avec MSMQ en C #
  • Comment travailler avec des méthodes d'extension en C #
  • Comment utiliser les expressions lambda en C #
  • Quand utiliser le mot clé volatile en C #
  • Comment utiliser le mot clé yield en C #
  • Comment implémenter le polymorphisme en C #
  • Comment créer votre propre planificateur de tâches en C #
  • Comment travailler avec RabbitMQ en C #
  • Comment travailler avec un tuple en C #
  • Explorer les méthodes virtuelles et abstraites en C #