CodeShot
Juniorسختی 2 از ۵· در 95٪ مصاحبه‌های این حوزه پرسیده شده

Dependency Injection چیست و چه مشکلی را حل می‌کند؟

نشان کردن

پاسخ کوتاه

الگویی که در آن وابستگی‌های یک کلاس از بیرون به آن داده می‌شوند تا کلاس به پیاده‌سازی مشخصی گره نخورد.

پاسخ کامل

DI یک تکنیک برای پیاده‌سازی اصل Inversion of Control است. به‌جای اینکه کلاس خودش تصمیم بگیرد از چه پیاده‌سازی‌ای استفاده کند، این تصمیم به لایه بالاتر (معمولاً Container) منتقل می‌شود.

سه مشکل اصلی را حل می‌کند:

  1. وابستگی سخت (Tight Coupling): کلاس فقط Interface را می‌شناسد، نه پیاده‌سازی را.
  2. تست‌ناپذیری: در تست می‌توان یک Fake یا Mock تزریق کرد.
  3. تکرار در ساخت اشیا: ساخت و مدیریت طول عمر اشیا در یک نقطه متمرکز می‌شود.

مثال کد

public class OrderService
{
    private readonly IOrderRepository _repository;
    public OrderService(IOrderRepository repository) => _repository = repository;
}

// ثبت در Container
services.AddScoped<IOrderRepository, SqlOrderRepository>();

نکته مهم

سه روش تزریق وجود دارد: Constructor، Property و Method. در ASP.NET Core روش پیش‌فرض و توصیه‌شده Constructor Injection است.

اشتباه رایج

❌ گفتن اینکه «DI یعنی استفاده از Container». Container فقط یک ابزار است؛ DI بدون Container هم کاملاً ممکن است (Poor Man's DI).

شرکت‌هایی که این سؤال را پرسیده‌اند

اسنپدیجی‌کالا