Как да работя с AutoMapper в C #

AutoMapper е популярна библиотека за картографиране на обект към обект, която може да се използва за картографиране на обекти, принадлежащи към различни видове. Като пример може да се наложи да съпоставите DTO (Обекти за трансфер на данни) във вашето приложение с обектите на модела. AutoMapper ви спестява досадното усилие да се налага ръчно картографиране на едно или повече свойства на такива несъвместими типове.

За да започнете работа с AutoMapper, трябва да създадете проект в Visual Studio и след това да инсталирате AutoMapper. Можете да инсталирате AutoMapper от NuGet, като използвате следната команда в прозореца на конзолата NuGet Package Manager:

PM> Инсталиране на пакет AutoMapper

Създайте картографиране с помощта на AutoMapper

Картографиране от обект на обект, като AutoMapper, преобразува входния обект от един тип в изходен обект от друг тип. Помислете за следните два класа.

 публична класа AuthorModel

    {

        публичен int Id

        {

            получи; комплект;

        }

        публичен низ FirstName

        {

            приготви се;

        }

        публичен низ LastName

        {

            получи; комплект;

        }

        публичен низ Адрес

        {

            получи; комплект;

        }

    }

 публична класа AuthorDTO

    {

        публичен int Id

        {

            получи; комплект;

        }

        публичен низ FirstName

        {

            получи; комплект;

        }

        публичен низ LastName

        {

            получи; комплект;

        }

        публичен низ Адрес

        {

            получи; комплект;

        }

    }

Следният кодов фрагмент показва как можете да създадете карта между тези два типа, AuthorModel и AuthorDTO.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

Тогава да се извърши картографирането между типовете е толкова просто, колкото показва следващата част от кода.

IMapper iMapper = config.CreateMapper ();

var източник = нов AuthorModel ();

var дестинация = iMapper.Map (източник);

Пример за AutoMapper 

Нека сега работим с някои данни. Обърнете се към следния код, който съхранява някои данни в обекта-източник и след това показва стойностите на свойствата в обекта-дестинация след приключване на картографирането.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var източник = нов AuthorModel ();

източник.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "Индия";

var дестинация = iMapper.Map (източник);

Console.WriteLine ("Име на автора:" + дестинация.Първо име + "" + дестинация.Последно име);

Когато изпълнявате горната част от кода, ще се покаже името на автора, съхранено в целевия обект. Стойностите на свойствата FirstName и Destination LastName обаче ще бъдат същите като обекта-източник, защото сте картографирали обектите успешно с помощта на AutoMapper!

Имайте предвид, че AutoMapper може да картографира всеки набор от класове. AutoMapper обаче следва определени конвенции, една от които е, че имената на свойствата, които се картографират, трябва да имат идентични имена. Ако имената на свойствата не са идентични, трябва да уведомите AutoMapper как трябва да се картографират свойствата. Ако приемем, че искаме да картографираме двете свойства Contact и ContactDetails, следващият пример илюстрира как това може да бъде постигнато.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                .ForMember (местоназначение => местоназначение. ContactDetails,

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

            });

Обърнете внимание на следния израз, който се използва за създаване на целевия обект.

var дестинация = iMapper.Map (източник);

Ако обектът дестинация вече съществува, вместо това можете да използвате изявлението по-долу.

iMapper.Map (sourceObject, destinationObject);

По същество горният кодов фрагмент може да се използва за картографиране на два обекта, които вече съществуват.

Използване на проекции в AutoMapper

AutoMapper осигурява отлична поддръжка за проекции. Проекциите се използват за съпоставяне на стойности на източника към дестинация, която не съответства на структурата на източника. (За разлика от това, картографирането, което обсъдихме по-горе, беше едно към едно.)

Нека сега разгледаме проекция. Например, помислете за следния клас.

 публичен клас Адрес

    {

        публичен низ Град {get; комплект; }

        публичен низ State {get; комплект; }

        публичен низ Държава {get; комплект; }

    }

Нека нашия клас AuthorModel използва класа Address, за да съхранява адресна информация на авторите. Ето как би изглеждал актуализираният клас AuthorModel.

 публична класа AuthorModel

    {

        публичен int Id

        {

            получи; комплект;

        }

        публичен низ FirstName

        {

            приготви се;

        }

        публичен низ LastName

        {

            получи; комплект;

        }

        публичен адрес Адрес

        {

            получи; комплект;

        }

    }

 И тук е актуализираният клас AuthorDTO.

публична класа AuthorDTO

    {

        публичен int Id

        {

            получи; комплект;

        }

        публичен низ FirstName

        {

            получи; комплект;

        }

        публичен низ LastName

        {

            получи; комплект;

        }

        публичен низ Град {get; комплект; }

        публичен низ State {get; комплект; }

        публичен низ Държава {get; комплект; }

    }

Сега да предположим, че трябва да картографираме класовете AuthorDTO и AuthorModel. Следният кодов фрагмент илюстрира как това може да се постигне.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                   .ForMember (местоназначение => местоназначение. Адрес,

              map => map.MapFrom (

                  източник => нов адрес

                  {

                      Град = източник .Град,

                      Състояние = източник .Състояние,

                      Държава = източник. Държава

                  }));

Ще обсъдя по-разширените функции на AutoMapper в следваща публикация тук. Дотогава можете да научите повече за AutoMapper на тази връзка.

Как да направите повече в C #:

  • Кога да се използва абстрактен клас срещу интерфейс в C #
  • Как да работя с AutoMapper в C #
  • Как да използвам ламбда изрази в C #
  • Как да работя с Action, Func и Predicate делегати в C #
  • Как да работя с делегати в C #
  • Как да внедрите прост регистратор в C #
  • Как да работя с атрибути в C #
  • Как да работя с log4net в C #
  • Как да приложим шаблона за проектиране на хранилището в C #
  • Как да работя с отражение в C #
  • Как да работя с файлова система за наблюдение в C #
  • Как да извършите мързелива инициализация в C #
  • Как да работите с MSMQ в C #
  • Как да работя с методи за разширение в C #
  • Как да използваме ламбда изрази в C #
  • Кога да се използва летливата ключова дума в C #
  • Как да използвам ключовата дума yield в C #
  • Как да приложим полиморфизъм в C #
  • Как да изградите свой собствен планировчик на задачи в C #
  • Как да работя с RabbitMQ в C #
  • Как да работите с кортеж в C #
  • Проучване на виртуални и абстрактни методи в C #