AutoMapper Kullanımı

Merhaba arkadaşlar, bugün sizlere bir kaç kişinin sorduğu AutoMapper entegrasyonundan bahsetmek istiyorum. Ayrı ayrı anlatmakta fayda olsa da bunu bir blog post haline getirmenin daha faydalı olacağını düşündüm.

Örneğe başlamadan önce kısaca Automapper nedir ve neden ihtiyaç duyuyoruz konusuna biraz değinmek istiyorum. Automapper, automapper.org tarafından yayınlanan nesneleri birbirlerine maplemek için kullanılan bir librrarydir. Mapper aracılığı ile ihtiyaç duyduğumuz heryerde nesneleri tek tek maplemek yerine bunu mapper aracılığı ile tek bir yerden kontrol edebiliyoruz bununla beraber gerekli parse işlemlerini de yine bu kütüphane aracılığı ile sağlayabiliyoruz.
AutoMapper
Aşağıda örnek olarak bir automapper profile oluşturarak nesnemizi dto objesine döndüreceğiz. Bunun için AutoMapper’ı .net core dependency injection yapısına uygun bir şekilde kullanacağız. Önce bir .net core api projesi açalım ve AutoMapper kütüphanesini projemize ekleyelim.

vs code
package manager console
yada nuget package manager aracılığı ile AutoMapper yükleyebilirsiniz.
Şimdi öncelikle bir User modelimiz birde UserInfoDto modelimiz olsun.  UserInfoDto modelinde, userın bilgilerinden faydalanılarak daha ufak çaplı bir bilgi modeli olacak ve bu model oluşurken AutoMapper dan faydalanarak bazı alanları parse ederek kullanacağız.

Şimdi bir MapperProfile klasörü oluşturarak bunun içerisine UserProfile adında bir sınıf oluşturalım ve AutoMapper dan faydalanarak map kurallarımızı belirtelim. Burada önemli olan UserProfile sınıfının AutoMapper altından gelen “Profile” classını kalıtım almasıdır.
Daha sonra constructor içerisinde CreateMap ile <KaynakObje, HedefObje> formatında modellerimizi verelim ve ForMember ile işlem yapmak istediğimiz Property üzerinde kuralları belirtelim.

Ben burada Dto objesinde ki name propertysinin firstname” “lastname formatında oluşmasını ve user modelinden gelen statusun maplenme aşamasında enuma cast edilerek enum isminin alınacağını belirttim.
Artık startup.cs içerisine gelerek AutoMapper ı kullanmak için register etmemiz gerekiyor.  Register işleminden sonra dependency injection yapısında IMapper interfacesini kullanabilir hale geleceğiz.
Bunun için “AutoMapper.Extensions.Microsoft.DependencyInjection” kütüphanesine kurmamız gerekiyor.
vs code
package manager console
yada nuget package manager aracılığı ile AutoMapper.Extensions.Microsoft.DependencyInjection yükleyebilirsiniz.
Register etmek için Startup sınıfında ConfigureServices bloğu altına gelerek kodumuzu ekleyelim.

Burada önemli inceliklerden biri typeof kullanarak mapper proflimizi register etmemiz. System.Type altından gelen typeof ile UserProfile tipini alarak aslında onu register ediyoruz. Yani Automapper profile sınıfını kalıtım alan tüm sınıfları tek bir noktadan register etmiş oluyoruz. UserProfile gibi başka bir mapper profile işlemi yaptığımızda o da otomatik olarak register olmuş olacak.
Şimdi kullanıma gelelim;
UserController da constructor injection ile IMapper interfacini inject edelim ve kullanıma hazır hale getirelim. Daha sonra kullanmak istediğimiz yerde
_mapper.Map<UserInfoDto>(user);
fonksiyonu ile dönüşüm işlemimizi gerçekleştirerek nesnemize ulaşalım.

komutu ile projemizi çalıştıralım ve ilgili localhost portundan verdiğimiz route ile kontrolümüzü gerçekleştirelim. Vs code ile localhosta bağlanamazsanız  “dotnet dev-certs https –trust” komutunu çalıştırarak developer certificate onay verin.

Benim istek urlim;
https://localhost:5001/api/user

Gördüğünüz gibi başarılı bir şekilde modelimizi mapledik ve response da gösterdik. Umarım faydalı olmuştur.
Kaynak
https://automapper.org/
https://docs.automapper.org/en/stable/Getting-started.html
https://github.com/AutoMapper/AutoMapper

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir