Programovanie

Ako pracovať s AutoMapperom v C #

AutoMapper je populárna knižnica mapovania medzi objektmi, ktorú je možné použiť na mapovanie objektov patriacich k odlišným typom. Napríklad budete možno musieť namapovať DTO (objekty prenosu údajov) vo svojej aplikácii na objekty modelu. AutoMapper vám ušetrí namáhavú námahu, ktorú je potrebné vykonať pri manuálnom mapovaní jednej alebo viacerých vlastností takýchto nekompatibilných typov.

Ak chcete začať pracovať s AutoMapperom, mali by ste vytvoriť projekt v Visual Studio a potom nainštalovať AutoMapper. AutoMapper môžete nainštalovať z NuGet pomocou nasledujúceho príkazu v okne konzoly Správca balíkov NuGet:

PM> AutoMapper pre inštaláciu balíka

Vytvárajte mapovania pomocou nástroja AutoMapper

Mapovač medzi objektmi, napríklad AutoMapper, prevádza vstupný objekt jedného typu na výstupný objekt iného typu. Zvážte nasledujúce dve triedy.

 verejná trieda AuthorModel

    {

public int Id

        {

dostať; sada;

        }

verejný reťazec FirstName

        {

pripraviť sa;

        }

verejný reťazec Priezvisko

        {

dostať; sada;

        }

verejný reťazec Adresa

        {

dostať; sada;

        }

    }

verejná trieda AuthorDTO

    {

public int Id

        {

dostať; sada;

        }

verejný reťazec FirstName

        {

dostať; sada;

        }

verejný reťazec Priezvisko

        {

dostať; sada;

        }

verejný reťazec Adresa

        {

dostať; sada;

        }

    }

Nasledujúci úryvok kódu ukazuje, ako môžete vytvoriť mapu medzi týmito dvoma typmi, AuthorModel a AuthorDTO.

var config = nová MapperConfiguration (cfg => {

cfg.CreateMap ();

            });

Potom je mapovanie medzi typmi také jednoduché, ako ukazuje nasledujúci kód.

IMapper iMapper = config.CreateMapper ();

var zdroj = nový AuthorModel ();

var destination = iMapper.Map (zdroj);

Príklad AutoMapper

Poďme teraz pracovať s niektorými údajmi. Pozrite si nasledujúcu časť kódu, ktorá ukladá niektoré údaje do zdrojového objektu a potom po dokončení mapovania zobrazí hodnoty vlastností v cieľovom objekte.

var config = nová MapperConfiguration (cfg => {

cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var zdroj = nový AuthorModel ();

source.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "India";

var destination = iMapper.Map (zdroj);

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

Po vykonaní vyššie uvedeného kódu sa zobrazí meno autora uložené v cieľovom objekte. Hodnoty cieľového mena FirstName a vlastnosti cieľového priezviska budú však rovnaké ako zdrojový objekt, pretože ste objekty úspešne mapovali pomocou nástroja AutoMapper!

Upozorňujeme, že AutoMapper dokáže mapovať ľubovoľnú skupinu tried. Program AutoMapper však dodržiava určité konvencie, jedným z nich je, že mapované názvy vlastností by mali mať rovnaké názvy. Ak názvy vlastností nie sú totožné, musíte dať aplikácii AutoMapper vedieť, ako by mali byť vlastnosti namapované. Za predpokladu, že chceme zmapovať dve vlastnosti Contact a ContactDetails, nasledujúci príklad ilustruje, ako je to možné dosiahnuť.

var config = nová MapperConfiguration (cfg => {

cfg.CreateMap ()

.ForMember (destination => destination.ContactDetails,

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

            });

Všimnite si nasledujúce vyhlásenie, ktoré sa používa na vytvorenie cieľového objektu.

var destination = iMapper.Map (zdroj);

Ak cieľový objekt už existuje, môžete namiesto toho použiť vyhlásenie nižšie.

iMapper.Map (sourceObject, destinationObject);

Vyššie uvedený úryvok kódu je možné v podstate použiť na mapovanie dvoch objektov, ktoré už existujú.

Používanie projekcií v aplikácii AutoMapper

AutoMapper poskytuje vynikajúcu podporu pre projekcie. Projekcie sa používajú na mapovanie zdrojových hodnôt na cieľ, ktorý nezodpovedá štruktúre zdroja. (Naproti tomu mapovanie, ktoré sme diskutovali vyššie, bolo mapovanie jedna k jednej.)

Pozrime sa teraz na projekciu. Zvážte napríklad nasledujúcu triedu.

 adresa verejnej triedy

    {

public string City {get; sada; }

public string State {get; sada; }

public string Country {get; sada; }

    }

Poďme, aby naša trieda AuthorModel používala triedu Adresa na ukladanie adresných informácií autorov. Takto by vyzerala aktualizovaná trieda AuthorModel.

 verejná trieda AuthorModel

    {

public int Id

        {

dostať; sada;

        }

verejný reťazec FirstName

        {

pripraviť sa;

        }

verejný reťazec Priezvisko

        {

dostať; sada;

        }

verejná adresa adresa

        {

dostať; sada;

        }

    }

A tu je aktualizovaná trieda AuthorDTO.

verejná trieda AuthorDTO

    {

public int Id

        {

dostať; sada;

        }

verejný reťazec FirstName

        {

dostať; sada;

        }

verejný reťazec Priezvisko

        {

dostať; sada;

        }

public string City {get; sada; }

public string State {get; sada; }

public string Country {get; sada; }

    }

Teraz predpokladajme, že musíme mapovať triedy AuthorDTO a AuthorModel. Nasledujúci úryvok kódu ilustruje, ako je to možné dosiahnuť.

var config = nová MapperConfiguration (cfg => {

cfg.CreateMap ()

.ForMember (destination => destination.Address,

map => map.MapFrom (

zdroj => nová adresa

                  {

Mesto = zdroj .Mesto,

Štát = zdroj. Štát,

Krajina = zdroj. Krajina

                  }));

Pokročilým funkciám AutoMapperu sa budem venovať v budúcom príspevku tu. Do tej doby sa na tomto odkaze dozviete viac o aplikácii AutoMapper.

Ako urobiť viac v C #:

  • Kedy použiť abstraktné rozhranie vs. rozhranie v C #
  • Ako pracovať s AutoMapperom v C #
  • Ako používať výrazy lambda v C #
  • Ako pracovať s delegátmi Action, Func a Predicate v C #
  • Ako pracovať s delegátmi v C #
  • Ako implementovať jednoduchý záznamník v C #
  • Ako pracovať s atribútmi v C #
  • Ako pracovať s log4net v C #
  • Ako implementovať vzor návrhu úložiska v C #
  • Ako pracovať s odrazom v C #
  • Ako pracovať so súborovým systémom v C #
  • Ako vykonať lenivú inicializáciu v C #
  • Ako pracovať s MSMQ v C #
  • Ako pracovať s metódami rozšírenia v C #
  • Ako na nás výrazy lambda v C #
  • Kedy použiť volatile kľúčové slovo v C #
  • Ako používať kľúčové slovo výťažku v C #
  • Ako implementovať polymorfizmus v C #
  • Ako zostaviť vlastný plánovač úloh v C #
  • Ako pracovať s RabbitMQ v C #
  • Ako pracovať s n-ticí v C #
  • Skúmanie virtuálnych a abstraktných metód v C #
$config[zx-auto] not found$config[zx-overlay] not found