• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

AutoMapper w ASP.NET - wywoływanie konstruktora

Object Storage Arubacloud
0 głosów
168 wizyt
pytanie zadane 4 sierpnia 2020 w C# przez Stami Gaduła (3,790 p.)

Witam,

Zacząłem się bawić pisaniem API w ASP.NET i natrafiłem na AutoMappera. W moim kodzie wszystko działa, ale zastanawia mnie jedna rzecz - co wywołuje mój konstruktor klasy. Ale od początku, to jest moja klasa:

public class MapperProfile : Profile {
    public MapperProfile() {
        CreateMap<User, UserDto>();
    }
}

I tu zaczyna się moja ciekawość, bo mapper działa świetnie, ale jaki mechanizm jest odpowiedzialny za wywołanie konstruktora MapperProfile? Wszystko co pisałem to linijka w funkcji ConfigureServices w pliku startup:

services.AddAutoMapper(this.GetType().Assembly);

To jest za to odpowiedzialne? Jeżeli tak w jaki sposób?

Z góry dziękuje za odpowiedź
i zaspokojenie mojej ciekawości ;)

1 odpowiedź

+1 głos
odpowiedź 4 sierpnia 2020 przez sunzi Bywalec (2,000 p.)
wybrane 4 sierpnia 2020 przez Stami
 
Najlepsza

Jak można wyczytać o oficjalnych poradnikach

You define the configuration using profiles. And then you let AutoMapper know in what assemblies are those profiles defined by calling the IServiceCollection extension method AddAutoMapper at startup:
https://docs.automapper.org/en/stable/Dependency-injection.html


AutoMapper will scan the designated assemblies for classes inheriting from Profile and add them to the configuration.

https://docs.automapper.org/en/stable/Configuration.html#profile-instances

Z tego wynika, że automapper używa refleksji do wyszukiwania klas które dziedziczą po pewnej klasie. Dalej zakładam, że jak wyszuka wszystkie klasy które dziedziczą po `Profile` to dalej utworzenie instancji takiej klasy (wywołanie konstruktora) nie jest trudne. Niestety nie dało mi się namierzyć konkretnie miejsca w kodzie odpowiedzialnego za to, ale myślę, że dobry startem byłby plik: https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection/blob/90b5d304aac661af2f917c6c0d97ef2f06b4caee/src/AutoMapper.Extensions.Microsoft.DependencyInjection/ServiceCollectionExtensions.cs

oraz plik z implementacją Profilu (aby lepiej zrozumieć co zawiera, jakie interfejsy implementuje etc): https://github.com/AutoMapper/AutoMapper/blob/18f974a091c910675eea599e6164e8b70ca3aae8/src/AutoMapper/Profile.cs

Najprościej byłoby sklonować oba repa i przejrzeć je przez IDE (bo po suchym tekście ciężko nawigować ;) )

Podobne pytania

+1 głos
2 odpowiedzi 685 wizyt
pytanie zadane 20 lipca 2021 w C# przez tomasz12345 Użytkownik (750 p.)
0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 1 listopada 2019 w C# przez JakSky Stary wyjadacz (14,770 p.)
0 głosów
1 odpowiedź 1,103 wizyt
pytanie zadane 9 kwietnia 2019 w C# przez karol928 Początkujący (320 p.)

92,669 zapytań

141,567 odpowiedzi

320,033 komentarzy

62,034 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...