عند الانتقال من واجهة برمجة التطبيق (API) الثابتة في AutoMapper، يتطلب الأمر تعديل بعض الجزيئيات في الشيفرة البرمجية الخاصة بك. يُعد هذا التحول جزءًا حيويًا من تحديث النظام، ورغم أنه قد يتسبب في بعض المشاكل في البداية، إلا أنه يفتح أفقًا أوسع للتكامل والتحكم الأفضل في الخرائط (Mappings) في التطبيقات.
سابقًا، كنت تستخدم الواجهة الثابتة باستخدام الطريقة Mapper.CreateMap()
، ولكنها أصبحت قديمة ومهجورة. الخطوة الأولى للتحول هي استخدام MapperConfiguration
وتخزينها بشكل ثابت عند بداية التطبيق. يمكنك فعل ذلك كالتالي:
csharp// ===> Startup.cs
public class Startup
{
public Startup(IHostingEnvironment env)
{
// ...
var mapperConfig = new MapperConfiguration(cfg =>
{
cfg.AddProfile();
cfg.AddProfile();
cfg.AddProfile();
});
IMapper mapper = mapperConfig.CreateMapper();
// يمكنك تخزين المتغير 'mapper' بشكل ثابت لاستخدامه في جميع أنحاء التطبيق
}
}
في هذا المثال، تم إنشاء MapperConfiguration
وتكوينها مع الـ Profile
الخاصة بك. ثم تم إنشاء IMapper
باستخدام CreateMapper()
.
الآن، بدلاً من استخدام Mapper.CreateMap()
في ملف AbcMappingProfile.cs
، يمكنك استخدام CreateMap()
مباشرة على الـ IMapper
:
csharp// ===> AbcMappingProfile.cs
public class AbcMappingProfile : Profile
{
protected override void Configure()
{
CreateMap();
CreateMap();
// ...
}
}
الخطأ الذي يظهر بسبب الـ ‘obsolete’ يشير إلى أنه يجب الابتعاد عن استخدام الواجهة الثابتة. الآن، يمكنك استخدام CreateMap()
بشكل مباشر دون الحاجة إلى Mapper.CreateMap()
.
باختصار، يتعين عليك إنشاء تكوين للـ AutoMapper في بداية التطبيق واستخدامه عبر IMapper
لتعريف الخرائط بشكل دينامي وفعال.
المزيد من المعلومات
بالتأكيد، دعنا نستكمل استعراض التحول من واجهة برمجة التطبيق (API) الثابتة في AutoMapper إلى النهج الدينامي باستخدام MapperConfiguration
و IMapper
.
عندما تقوم بتحديث AutoMapper، يتوجب عليك أيضًا إجراء بعض التغييرات في كيفية استخدام IMapper
لعمليات الخرائط. سأشرح كيفية استخدام IMapper
في بعض السيناريوهات الشائعة.
1. خريطة الكائنات:
في حالة رغبتك في تنفيذ خريطة بين كائنين، يمكنك استخدام IMapper
كما يلي:
csharp// في أي مكان داخل التطبيق بعد إعداد التكوين
var sourceObject = new AbcEditViewModel();
var destinationObject = mapper.Map(sourceObject);
2. تحديث الكائن الهدف:
إذا كنت بحاجة إلى تحديث كائن هدف بناءً على بيانات من كائن آخر، يمكنك استخدام Map
كما يلي:
csharp// تحديث الكائن الهدف باستخدام بيانات من الكائن الأصل
mapper.Map(sourceObject, destinationObject);
3. الخيارات الإضافية:
يمكنك أيضًا استخدام العديد من الخيارات الإضافية أثناء تنفيذ عمليات الخرائط، مثل تخصيص المخططات (Profiles) وتجاوز السلوك الافتراضي للتحويل.
csharp// تحديد خرائط مخصصة باستخدام ملف تكوين آخر
mapper.ConfigurationProvider.AssertConfigurationIsValid();
// تحديد سلوك تحويل مخصص
mapper.Map(sourceObject, destinationObject, opt => opt.AfterMap((src, dest) => dest.SomeProperty = "Custom Value"));
بهذه الطريقة، يمكنك استفادة الكثير من ميزات AutoMapper الجديدة والتحكم الكامل في عمليات الخرائط دون الاعتماد على واجهة برمجة التطبيق الثابتة. تذكر دائمًا تحديث ملفات التكوين والملفات الفرعية لتتناسب مع التغييرات وضمان استمرار عمل التطبيق بسلاسة.