Come lavorare con AutoMapper in C #

AutoMapper è una popolare libreria di mappatura da oggetto a oggetto che può essere utilizzata per mappare oggetti appartenenti a tipi diversi. Ad esempio, potrebbe essere necessario mappare i DTO (Data Transfer Objects) nell'applicazione agli oggetti del modello. AutoMapper ti evita il noioso sforzo di dover mappare manualmente una o più proprietà di tali tipi incompatibili.

Per iniziare a lavorare con AutoMapper, è necessario creare un progetto in Visual Studio e quindi installare AutoMapper. È possibile installare AutoMapper da NuGet utilizzando il comando seguente nella finestra della console di Gestione pacchetti NuGet:

PM> Install-Package AutoMapper

Crea mappature usando AutoMapper

Un mappatore da oggetto a oggetto come AutoMapper converte un oggetto di input di un tipo in un oggetto di output di un altro tipo. Considera le seguenti due classi.

 classe pubblica AuthorModel

    {

        public int Id

        {

            ottenere; impostato;

        }

        stringa pubblica FirstName

        {

            preparatevi;

        }

        stringa pubblica LastName

        {

            ottenere; impostato;

        }

        indirizzo stringa pubblica

        {

            ottenere; impostato;

        }

    }

 classe pubblica AuthorDTO

    {

        public int Id

        {

            ottenere; impostato;

        }

        stringa pubblica FirstName

        {

            ottenere; impostato;

        }

        stringa pubblica LastName

        {

            ottenere; impostato;

        }

        indirizzo stringa pubblica

        {

            ottenere; impostato;

        }

    }

Il frammento di codice seguente mostra come creare una mappa tra questi due tipi, AuthorModel e AuthorDTO.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

Quindi eseguire la mappatura tra i tipi è semplice come mostra la seguente parte di codice.

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

var destinazione = iMapper.Map (origine);

Un esempio di AutoMapper 

Ora lavoriamo con alcuni dati. Fare riferimento alla parte di codice seguente che memorizza alcuni dati nell'oggetto di origine e quindi visualizza i valori delle proprietà nell'oggetto di destinazione al termine della mappatura.

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 = "India";

var destinazione = iMapper.Map (origine);

Console.WriteLine ("Nome autore:" + destination.FirstName + "" + destination.LastName);

Quando esegui la parte di codice precedente, verrà visualizzato il nome dell'autore memorizzato nell'oggetto di destinazione. Tuttavia, i valori delle proprietà FirstName e LastName di destinazione saranno gli stessi dell'oggetto di origine perché hai mappato correttamente gli oggetti utilizzando AutoMapper!

Nota che AutoMapper può mappare qualsiasi insieme di classi. Tuttavia, AutoMapper segue alcune convenzioni, una delle quali è che i nomi delle proprietà mappati dovrebbero avere nomi identici. Se i nomi delle proprietà non sono identici, è necessario che AutoMapper sappia come mappare le proprietà. Supponendo di voler mappare le due proprietà Contact e ContactDetails, il seguente esempio illustra come questo può essere ottenuto.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                .ForMember (destination => destination.ContactDetails,

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

            });

Notare la seguente istruzione utilizzata per creare l'oggetto di destinazione.

var destinazione = iMapper.Map (origine);

Se l'oggetto di destinazione esiste già, è possibile utilizzare invece l'istruzione seguente.

iMapper.Map (sourceObject, destinationObject);

In sostanza, lo snippet di codice sopra può essere utilizzato per mappare due oggetti già esistenti.

Utilizzo delle proiezioni in AutoMapper

AutoMapper fornisce un eccellente supporto per le proiezioni. Le proiezioni vengono utilizzate per mappare i valori di origine a una destinazione che non corrisponde alla struttura dell'origine. (Al contrario, la mappatura di cui abbiamo discusso sopra era una mappatura uno a uno.)

Vediamo ora una proiezione. Ad esempio, considera la seguente classe.

 public class Indirizzo

    {

        stringa pubblica City {get; impostato; }

        public string State {get; impostato; }

        stringa pubblica Paese {get; impostato; }

    }

Facciamo in modo che la nostra classe AuthorModel utilizzi la classe Address per memorizzare le informazioni sull'indirizzo degli autori. Ecco come sarebbe la classe AuthorModel aggiornata.

 classe pubblica AuthorModel

    {

        public int Id

        {

            ottenere; impostato;

        }

        stringa pubblica FirstName

        {

            preparatevi;

        }

        stringa pubblica LastName

        {

            ottenere; impostato;

        }

        public Address Indirizzo

        {

            ottenere; impostato;

        }

    }

 Ed ecco la classe AuthorDTO aggiornata.

classe pubblica AuthorDTO

    {

        public int Id

        {

            ottenere; impostato;

        }

        stringa pubblica FirstName

        {

            ottenere; impostato;

        }

        stringa pubblica LastName

        {

            ottenere; impostato;

        }

        stringa pubblica City {get; impostato; }

        public string State {get; impostato; }

        stringa pubblica Paese {get; impostato; }

    }

Supponiamo ora di dover mappare le classi AuthorDTO e AuthorModel. Il frammento di codice seguente illustra come ottenere questo risultato.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                   .ForMember (destinazione => destinazione.Indirizzo,

              map => map.MapFrom (

                  source => nuovo indirizzo

                  {

                      Città = fonte. Città,

                      State = source .State,

                      Paese = origine Paese

                  }));

Discuterò le funzionalità più avanzate di AutoMapper in un prossimo post qui. Fino ad allora, puoi saperne di più su AutoMapper a questo link.

Come fare di più in C #:

  • Quando usare una classe astratta e un'interfaccia in C #
  • Come lavorare con AutoMapper in C #
  • Come usare le espressioni lambda in C #
  • Come lavorare con i delegati Action, Func e Predicate in C #
  • Come lavorare con i delegati in C #
  • Come implementare un semplice logger in C #
  • Come lavorare con gli attributi in C #
  • Come lavorare con log4net in C #
  • Come implementare il modello di progettazione del repository in C #
  • Come lavorare con la riflessione in C #
  • Come lavorare con Filesystemwatcher in C #
  • Come eseguire l'inizializzazione pigra in C #
  • Come lavorare con MSMQ in C #
  • Come lavorare con i metodi di estensione in C #
  • Come utilizzare espressioni lambda in C #
  • Quando usare la parola chiave volatile in C #
  • Come utilizzare la parola chiave yield in C #
  • Come implementare il polimorfismo in C #
  • Come creare il proprio pianificatore di attività in C #
  • Come lavorare con RabbitMQ in C #
  • Come lavorare con una tupla in C #
  • Esplorazione di metodi virtuali e astratti in C #