PDA

View Full Version : سوال: Automapper در repository



r4hgozar
سه شنبه 06 شهریور 1397, 18:52 عصر
سلام دوستان.
مثل اینکه mapper یک مقداری با automaper mvc5 تغیر کرده.
من می خوام تو repository از ویو viewmodel بگیرم و اون رو با mapper بریزم تو model و بعد add دیتابیس کنم.


کسی مقاله یا نمونه کدی داره؟؟

hakim22
چهارشنبه 07 شهریور 1397, 08:53 صبح
اول باید مشخص کنید که برای MVC5 می خواهید یا برای Core

تغییر اساسی سیستم AutoMapper اینه که از این به بعد باید IMapper رو به عنوان تزریق کنید تا به اون دسترسی داشته باشید. قبلا یک کلاس استاتیک به نام Mapper بود که می تونست همه ی Map ها بارگذاری کنه ولی خیلی از برنامه نویسها با نوشتن کلاسهای خودشون سعی می کردن به جای کلاس استاتیک اون رو تزریق کنند. در نسخه های جدیدتر این اتفاق در خود فریم ورک افتاده.

اول باید کلاس IMapper رو در سیستم تزریق وابستگی که دارید (Ninject و StructureMape و ...) ثبت کنید (Register) و بعد در هر کلاسی نیاز به AutoMapper داشتید باید IMapper رو تزریق کنید.


IMapper mapper = AutoMapperBinder();
kernel.Bind<IMapper>().ToConstant(mapper).InSingletonScope();


در ASP.NET Core یک سرویس مخصوص این کار قبلا پیاده شده کافیه Module مربوطه رو نصب کنید. و بعد در سرویس لود کنید.



Install-Package AutoMapper.Extensions.Microsoft.DependencyInjectio n





services.AddAutoMapper();


پروژه ی MVC5 که در اون قبلا AutoMapper با Ninject تنظیم شده :
https://github.com/codehaks/Portal-Net

پروژه ی ASP.NET Core با AutoMapper :
https://github.com/codehaks/Portal-Core-Fa

r4hgozar
پنج شنبه 08 شهریور 1397, 17:49 عصر
اول باید مشخص کنید که برای MVC5 می خواهید یا برای Core

تغییر اساسی سیستم AutoMapper اینه که از این به بعد باید IMapper رو به عنوان تزریق کنید تا به اون دسترسی داشته باشید. قبلا یک کلاس استاتیک به نام Mapper بود که می تونست همه ی Map ها بارگذاری کنه ولی خیلی از برنامه نویسها با نوشتن کلاسهای خودشون سعی می کردن به جای کلاس استاتیک اون رو تزریق کنند. در نسخه های جدیدتر این اتفاق در خود فریم ورک افتاده.

اول باید کلاس IMapper رو در سیستم تزریق وابستگی که دارید (Ninject و StructureMape و ...) ثبت کنید (Register) و بعد در هر کلاسی نیاز به AutoMapper داشتید باید IMapper رو تزریق کنید.


IMapper mapper = AutoMapperBinder();
kernel.Bind<IMapper>().ToConstant(mapper).InSingletonScope();


در ASP.NET Core یک سرویس مخصوص این کار قبلا پیاده شده کافیه Module مربوطه رو نصب کنید. و بعد در سرویس لود کنید.




services.AddAutoMapper();


پروژه ی MVC5 که در اون قبلا AutoMapper با Ninject تنظیم شده :
https://github.com/codehaks/Portal-Net

پروژه ی ASP.NET Core با AutoMapper :
https://github.com/codehaks/Portal-Core-Fa


سلام.
بله این کار رو انجام دادم و تنظیم کردم. اما یه مشکلی که هست اینه که باید یک کلاس


public class AutomapperDomin: Profile
{
public AutomapperDomin()
{
CreateMap<Group, GroupViewmodel>();
CreateMap<GroupViewmodel, Group>();
}
}


می خواستم بدونم این تنها روش مپ کردنه؟؟

hakim22
شنبه 10 شهریور 1397, 09:33 صبح
این روشی هست که خود AutoMapper استفاده میکنه.البته من دیدم که با ترفندهایی میان و AutoMapper رو میبرن داخل خود Model و ViewModel که مستقل از سیستم مرکزی عمل کنه. به نظر من این کار پروژه رو خیلی شلوغتر میکنه.