.NET Core - Dependency Injection في ‎.NET Core

6.1 .NET Core - Dependency Injection في ‎.NET Core

Dependency Injection (DI) هي أحد المبادئ الأساسية في تصميم البرمجيات، وASP.NET Core يدعمها بشكل مدمج وأساسي. تساعد هذه التقنية على كتابة كود أكثر مرونة، قابل للاختبار، وقابل للصيانة.


🔹 ما المقصود بـ Dependency Injection؟

DI تعني "حقن التبعيات" — أي تمرير الكائنات التي تعتمد عليها الكلاسات بدلاً من إنشائها داخلها. بدل ما الكلاس ينشئ الكائن بنفسه، يتم تمريره إليه من الخارج عبر الـ Constructor.

❌ بدون DI:


public class ProductService
{
    private readonly ProductRepository _repo = new ProductRepository();
}

✅ باستخدام DI:


public class ProductService
{
    private readonly ProductRepository _repo;

    public ProductService(ProductRepository repo)
    {
        _repo = repo;
    }
}

✅ هذا يجعل الكود أسهل للاختبار، ويمكن تبديل ProductRepository بأي نسخة أخرى عند الحاجة.

🔹 أنواع التسجيل في ASP.NET Core

يتم تسجيل الخدمات داخل Program.cs باستخدام واحدة من الطرق التالية:

  • AddSingleton: يتم إنشاء نسخة واحدة فقط طوال عمر التطبيق.
  • AddScoped: يتم إنشاء نسخة واحدة لكل طلب (HTTP Request).
  • AddTransient: يتم إنشاء نسخة جديدة كل مرة يتم فيها طلب الكائن.

// في Program.cs
builder.Services.AddSingleton<ILogService, LogService>();
builder.Services.AddScoped<IProductService, ProductService>();
builder.Services.AddTransient<IEmailService, EmailService>();

🔹 حقن التبعيات في الكنترولر


public class ProductsController : ControllerBase
{
    private readonly IProductService _service;

    public ProductsController(IProductService service)
    {
        _service = service;
    }
}

🔸 ASP.NET Core يقوم بإنشاء الكائن وتمريره تلقائيًا.

🔹 استخدام واجهات (Interfaces)

استخدام الواجهات يجعل DI أكثر مرونة، ويسمح بتبديل الخدمة بسهولة في الاختبارات أو التخصيص.


// IProductService.cs
public interface IProductService
{
    IEnumerable<Product> GetAll();
}

// ProductService.cs
public class ProductService : IProductService
{
    public IEnumerable<Product> GetAll() => new List<Product>();
}

🔹 الخلاصة

Dependency Injection في ‎.NET Core هي تقنية قوية تساعدك على تقليل التكرار، تسهيل الاختبار، وتحقيق مبدأ Separation of Concerns. وهي من أفضل الممارسات التي يجب استخدامها في كل مشروع ASP.NET Core حديث.

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework