So arbeiten Sie mit AutoMapper in C #

AutoMapper ist eine beliebte Objekt-zu-Objekt-Zuordnungsbibliothek, mit der Objekte unterschiedlicher Typen zugeordnet werden können. Beispielsweise müssen Sie möglicherweise die DTOs (Data Transfer Objects) in Ihrer Anwendung den Modellobjekten zuordnen. AutoMapper erspart Ihnen den mühsamen Aufwand, eine oder mehrere Eigenschaften solcher inkompatiblen Typen manuell zuzuordnen.

Um mit AutoMapper zu arbeiten, sollten Sie ein Projekt in Visual Studio erstellen und dann AutoMapper installieren. Sie können AutoMapper von NuGet aus mit dem folgenden Befehl im NuGet Package Manager-Konsolenfenster installieren:

PM> Install-Package AutoMapper

Erstellen Sie Zuordnungen mit AutoMapper

Ein Objekt-zu-Objekt-Mapper wie AutoMapper konvertiert ein Eingabeobjekt eines Typs in ein Ausgabeobjekt eines anderen Typs. Betrachten Sie die folgenden zwei Klassen.

 öffentliche Klasse AuthorModel

    {

        public int Id

        {

            bekommen; einstellen;

        }}

        öffentliche Zeichenfolge Vorname

        {

            bekommen; setzen;

        }}

        öffentliche Zeichenfolge Nachname

        {

            bekommen; einstellen;

        }}

        öffentliche Zeichenfolge Adresse

        {

            bekommen; einstellen;

        }}

    }}

 öffentliche Klasse AuthorDTO

    {

        public int Id

        {

            bekommen; einstellen;

        }}

        öffentliche Zeichenfolge Vorname

        {

            bekommen; einstellen;

        }}

        öffentliche Zeichenfolge Nachname

        {

            bekommen; einstellen;

        }}

        öffentliche Zeichenfolge Adresse

        {

            bekommen; einstellen;

        }}

    }}

Das folgende Codefragment zeigt, wie Sie eine Zuordnung zwischen diesen beiden Typen AuthorModel und AuthorDTO erstellen können.

var config = neue MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

Die Zuordnung zwischen den Typen ist dann so einfach, wie der folgende Code zeigt.

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

var destination = iMapper.Map (Quelle);

Ein AutoMapper-Beispiel 

Lassen Sie uns nun mit einigen Daten arbeiten. Lesen Sie den folgenden Code, der einige Daten im Quellobjekt speichert und nach Abschluss der Zuordnung die Eigenschaftswerte im Zielobjekt anzeigt.

var config = neue MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

source.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "Indien";

var destination = iMapper.Map (Quelle);

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

Wenn Sie den obigen Code ausführen, wird der im Zielobjekt gespeicherte Autorenname angezeigt. Die Werte der Eigenschaften FirstName und Destination LastName des Ziels stimmen jedoch mit denen des Quellobjekts überein, da Sie die Objekte erfolgreich mit AutoMapper zugeordnet haben!

Beachten Sie, dass AutoMapper beliebige Klassen zuordnen kann. AutoMapper folgt jedoch bestimmten Konventionen. Eine davon ist, dass die zugeordneten Eigenschaftsnamen identische Namen haben sollten. Wenn die Eigenschaftsnamen nicht identisch sind, müssen Sie AutoMapper mitteilen, wie die Eigenschaften zugeordnet werden sollen. Angenommen, wir möchten die beiden Eigenschaften Contact und ContactDetails zuordnen, zeigt das folgende Beispiel, wie dies erreicht werden kann.

var config = neue MapperConfiguration (cfg => {

                cfg.CreateMap ()

                .ForMember (Ziel => Ziel.ContactDetails,

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

            });

Beachten Sie die folgende Anweisung, mit der das Zielobjekt erstellt wird.

var destination = iMapper.Map (Quelle);

Wenn das Zielobjekt bereits vorhanden ist, können Sie stattdessen die folgende Anweisung verwenden.

iMapper.Map (sourceObject, destinationObject);

Im Wesentlichen kann das obige Codefragment verwendet werden, um zwei bereits vorhandene Objekte zuzuordnen.

Verwenden von Projektionen in AutoMapper

AutoMapper bietet hervorragende Unterstützung für Projektionen. Projektionen werden verwendet, um Quellwerte einem Ziel zuzuordnen, das nicht mit der Struktur der Quelle übereinstimmt. (Im Gegensatz dazu war das oben diskutierte Mapping ein Eins-zu-Eins-Mapping.)

Schauen wir uns nun eine Projektion an. Betrachten Sie beispielsweise die folgende Klasse.

 öffentliche Klasse Adresse

    {

        öffentlicher String City {get; einstellen; }}

        öffentlicher String State {get; einstellen; }}

        öffentlicher String Country {get; einstellen; }}

    }}

Lassen Sie unsere AuthorModel-Klasse die Address-Klasse verwenden, um Adressinformationen der Autoren zu speichern. So würde die aktualisierte AuthorModel-Klasse aussehen.

 öffentliche Klasse AuthorModel

    {

        public int Id

        {

            bekommen; einstellen;

        }}

        öffentliche Zeichenfolge Vorname

        {

            bekommen; setzen;

        }}

        öffentliche Zeichenfolge Nachname

        {

            bekommen; einstellen;

        }}

        öffentliche Adresse Adresse

        {

            bekommen; einstellen;

        }}

    }}

 Und hier ist die aktualisierte AuthorDTO-Klasse.

öffentliche Klasse AuthorDTO

    {

        public int Id

        {

            bekommen; einstellen;

        }}

        öffentliche Zeichenfolge Vorname

        {

            bekommen; einstellen;

        }}

        öffentliche Zeichenfolge Nachname

        {

            bekommen; einstellen;

        }}

        öffentlicher String City {get; einstellen; }}

        öffentlicher String State {get; einstellen; }}

        öffentlicher String Country {get; einstellen; }}

    }}

Angenommen, wir müssen die Klassen AuthorDTO und AuthorModel zuordnen. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

var config = neue MapperConfiguration (cfg => {

                cfg.CreateMap ()

                   .ForMember (Ziel => Ziel.Adresse,

              map => map.MapFrom (

                  Quelle => neue Adresse

                  {

                      Stadt = Quelle. Stadt,

                      State = source .State,

                      Land = Quelle. Land

                  }));

Ich werde die erweiterten Funktionen von AutoMapper in einem zukünftigen Beitrag hier diskutieren. Bis dahin können Sie unter diesem Link mehr über AutoMapper erfahren.

So machen Sie mehr in C #:

  • Wann wird eine abstrakte Klasse im Vergleich zur Schnittstelle in C # verwendet?
  • So arbeiten Sie mit AutoMapper in C #
  • Verwendung von Lambda-Ausdrücken in C #
  • So arbeiten Sie mit Action-, Func- und Predicate-Delegaten in C #
  • So arbeiten Sie mit Delegierten in C #
  • So implementieren Sie einen einfachen Logger in C #
  • So arbeiten Sie mit Attributen in C #
  • So arbeiten Sie mit log4net in C #
  • So implementieren Sie das Repository-Entwurfsmuster in C #
  • Wie man mit Reflexion in C # arbeitet
  • So arbeiten Sie mit dem Dateisystemwatcher in C #
  • So führen Sie eine verzögerte Initialisierung in C # durch
  • So arbeiten Sie mit MSMQ in C #
  • So arbeiten Sie mit Erweiterungsmethoden in C #
  • Wie wir Lambda-Ausdrücke in C #
  • Wann wird das flüchtige Schlüsselwort in C # verwendet?
  • Verwendung des Schlüsselwortsield in C #
  • So implementieren Sie Polymorphismus in C #
  • So erstellen Sie Ihren eigenen Taskplaner in C #
  • So arbeiten Sie mit RabbitMQ in C #
  • So arbeiten Sie mit einem Tupel in C #
  • Erkundung virtueller und abstrakter Methoden in C #