تسجيل الخدمة وتنفيذها باستخدام AddKeyedScoped في ASP.NET Core
عند العمل على تطوير التطبيقات باستخدام ASP.NET Core، تُعتبر إدارة التبعيات من العوامل الرئيسية التي تساهم في بناء تطبيقات قابلة للصيانة وقابلة للتطوير. واحدة من الاستراتيجيات المتاحة لتعريف التبعيات وإدارتها هي استخدام AddKeyedScoped
. في هذا المقال، سنتناول كيفية تسجيل الخدمات والتنفيذ باستخدام AddKeyedScoped
، وما هي الأخطاء الشائعة التي قد تواجهها أثناء عملية التسجيل.
ما هو AddKeyedScoped؟
تُستخدم AddKeyedScoped
في ASP.NET Core لتسجيل الخدمات بطريقة تتيح لك تحديد كيفية إنشاء النسخ الخاصة بالخدمات اعتمادًا على مفتاح معين. بمعنى آخر، يمكنك أن تمتلك تنفيذات متعددة لنفس الواجهة، وكل تنفيذ يمكن أن يُستخدم في مواقف مختلفة. يمثل هذا الأمر قوة كبيرة لتحسين مرونة التطبيق والتحكم في طريقة استخدام الخدمات.
تنفيذ الكود الخاص بك
في نموذجنا، لدينا واجهة IService
وفئة SampleDAL
التي تمثل طبقة الوصول إلى البيانات. إذا نظرنا إلى الكود، نجد أن SampleDAL
تنفذ واجهة IService
، وتقوم بتعريف طريقة GetString
.
public interface IService
{
public Task GetString();
}
public class SampleDAL : IService
{
public async Task GetString()
{
// افعل شيئًا
}
}
ثم لدينا فئة SampleBl
التي تمثل طبقة الأعمال. تستخدم هذه الفئة IService
لنقل البيانات وعمليات الأعمال.
public class SampleBl : IService
{
private readonly IService service;
public SampleBl([FromKeyedServices("SampleBl")] IService service)
{
this.service = service;
}
public Task GetString()
{
var thing = service.GetString();
return thing;
}
}
وأخيرًا، لدينا وحدة التحكم التي تستقبل الطلبات وتستدعي الطبقات السابقة لعرض النتائج.
التسجيل في Program.cs
لتسجيل خدمات SampleDAL
وSampleBl
، تستخدم الشيفرة التالية في ملف Program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddKeyedScoped("SampleDal");
builder.Services.AddKeyedScoped("SampleBl");
ومع ذلك، قد تواجه بعض الأخطاء عند تشغيل واجهة برمجة التطبيقات، مثل "تبعية دائرية للخدمة". يحدث هذا الخطأ عادةً عندما يحاول الإطار إنشاء خدمة تعتمد على خدمة أخرى، في حين أن هذه الخدمة تعتمد في الأصل على الأولى، مما يؤدي إلى دائرة مغلقة في الاعتماديات.
تصحيح الخطأ
لإصلاح هذا الخطأ، عليك التأكد من أن لديك رسمًا واضحًا لتبعياتك. قد تحتاج إلى إعادة تنظيم الخدمات لتجنب تلك الدائرة. إذا كانت لديك خدمة تعتمد على خدمة أخرى، فمن الضروري إعادة تقييم تصميم الطبقات ومن ثم ضمان أن كل خدمة يمكن استدعاؤها بشكل مستقل.
الخلاصة
تعتبر ASP.NET Core - Register service and implementation using AddKeyedScoped
أسلوبًا فعالًا لإدارة التبعيات، مما يوفر مرونة وكفاءة في تنظيم الخدمات. باستخدام المفاتيح، يمكنك إدماج تنفيذات مختلفة لنفس الواجهة كما هو موضح في المثال السابق. ولكن عليك أن تكون واعيًا للأخطاء المحتملة مثل الدوائر في التبعيات. تعلم كيفية التعامل مع هذه الأخطاء سيجعل تجربة تطوير التطبيقات الخاصة بك أكثر سلاسة.
إذا كنت بدءت في استخدام تعبير AddKeyedScoped
، تأكد من فهم التبعيات جيدًا وكيفية تنظيم الكود بطريقة مناسبة تضمن عدم وجود تعارضات أو دورات عند التسجيل.