1. ابتدا پکیج Boxed.Mapping را نصب می نماییم
2. سپس در قسمتی از برنامه ( مثلا زیر مجموعه service یک پوشه با نام mapper می سازیم و داخل ان به ازای هر map یک کلاس می سازیم ) در زیر نمونه ای از کلاس مد نظر ساخته شده اورده شده است:
namespace Service.Services.Mapper;
// dar in ja ba estefade az using pakcage made nazaro vared mikonim
using Boxed.Mapping;
using Common.DataBase;
using Models.ViewModels;
using Utility;
public class UserMapper : IMapper<User, UserDto>, IMapper<UserDto, User>
{
public void Map(User source, UserDto destination)
{
ArgumentNullException.ThrowIfNull(source);
ArgumentNullException.ThrowIfNull(destination);
destination.Id = source.Id;
destination.FirstName = source.FirstName;
destination.LastName = source.LastName;
destination.IsDisabled = source.IsDisabled;
destination.UserName = source.UserName;
destination.CreateDate = source.CreateDate;
destination.IsBot = source.IsBot;
destination.PublicKey = source.PublicKey;
destination.FullName = source.FullName;
if (source.Groups is not null)
{
destination.Groups = source.Groups.Select(x => new GroupDto()
{
Description = x.Description,
Id = x.Id,
Name = x.Name,
}).ToList();
}
}
public void Map(UserDto source, User destination)
{
ArgumentNullException.ThrowIfNull(source);
ArgumentNullException.ThrowIfNull(destination);
destination.IsDisabled = source.IsDisabled;
destination.UserName = source.UserName;
destination.FirstName = source.FirstName;
destination.LastName = source.LastName;
destination.IsBot = source.IsBot;
destination.CreateDate = DateTime.UtcNow;
if (source.IsBot && source.Id != null && source.BotPassword != null)
{
destination.AuthPwd = AuthenticationUtils.CreateBotHash(source.Id.Value, source.BotPassword);
}
else
{
destination.AuthPwd = null;
}
}
}
3. و در نهایت کافی است در کلاس program یک service جدید بصورت transiant ایجاد کنیم از کلاس مد نظر مانند زیر:
builder.Services.AddTransient<IMapper<UserDto, User>, UserMapper>()
4. سپس جهت استفاده از این mapper کافی است بصورت dependency injection داخل constructor کلاس مد نظر آنرا injec کنیم
private readonly IMapper<User, UserDto> userToDtoMapper;
5. و در نهایت در متد مد نظر به صورت زیر ازش استفاده می کنیم و میتونیم فقط مدل دیتابیسو به عنوان وروردی بهش بدیم
var result = this.userToDtoMapper.MapList(users);
و در نهایت به عنوان خروجی یک مدل به صورت Dto به ما تحویل میده