1 Şubat 2018 Perşembe

Mapper Sınıfı

Giriş
AutoMapper biribiri ile ilgisi olmayan nesneler arasında dönüşüm yapabilir.

Map Sınıfı
CreateMap metodu
İmzası şöyle.
Mapper.CreateMap<SourceClass, DestinationClass>();
Açıklaması şöyle. Yani önce CreateMap() çağrısı ile dönüşümün nasıl olacağı tanımlanır, daha sonra Map() çağrısı ile iki nesne arasında dönüşüm yapılır.
All mapping definitions for AutoMapper are created using the CreateMap method.
Bu metod eski kodlarda kullanılıyor. Açıklaması şöyle.
Mapper.CreateMap<TSource,TDestination> is obsolete: Dynamically creating maps will be removed in 5.0. Use a MapperConfiguration instance and store statically as needed, or Mapper.Initialize(). Use CreateMapper to create a mapper instance.
Örnek
Şöyle yaparız.
Mapper.CreateMap<Person, PersonViewModel>(person)
  .ForMember(dest => dest.BirthDate,
 opt => opt.ResolveUsing(src => src.BirthDate.ToString(AppConstants.DefaultDateFormat)));
Örnek
Bu metodu direkt kullanmak yerine şöyle de yapılabilir.
var config = new MapperConfiguration(cfg => {
  cfg.CreateMap<User, UserDto>();
});
Daha sonra şöyle yaparız.
IMapper map = cfg.CreateMapper();
ForMember metodu
İlk parametre hedef nesnedeki alandır, ikinci parametre kaynak nesnedeki alandır.
Örnek
Şöyle yaparız.
Mapper.Map<User, UsersViewItem>()
  .ForMember(vm=>vm.UserName, m=>m.MapFrom(u=>(u.UserName != null) 
                                             ? u.UserName 
                                             : "User" + u.ID.ToString()));
Map metodu
Elimizde iki sınıf olsun.
public class Employee
{
  public string Name { get; set; }
  public string Email { get; set; }
}

public class EmployeeViewItem
{
  public string Name { get; set; }
  public string Email { get; set; }
}
Şöyle yaparız.
EmployeeViewItem viewItem = Mapper.Map<Employee, EmployeeViewItem>(employee); 

Hiç yorum yok:

Yorum Gönder