CodeShot
Seniorسختی 3 از ۵· در 70٪ مصاحبه‌های این حوزه پرسیده شده

Dependency Inversion چه فرقی با Dependency Injection دارد؟

نشان کردن

پاسخ کوتاه

Dependency Inversion یک اصل طراحی است (وابستگی به Abstraction، نه پیاده‌سازی)؛ Dependency Injection یک تکنیک برای تزریق آن وابستگی از بیرون است — DI ابزاری برای رسیدن به DIP است.

پاسخ کامل

می‌توان Dependency Inversion را بدون هیچ Container ای هم رعایت کرد (مثلاً با پاس دادن دستی Interface در سازنده — Poor Man's DI)؛ Dependency Injection معمولاً این کار را با یک Container (مثل IServiceCollection در ASP.NET Core) خودکار می‌کند.

مثال کد

// اصل (DIP): وابستگی به Interface
class OrderService
{
    private readonly IOrderRepository _repo;
    public OrderService(IOrderRepository repo) => _repo = repo;
}

// تکنیک (DI): ثبت در Container
services.AddScoped<IOrderRepository, SqlOrderRepository>();

نکته مهم

DIP دربارهٔ جهت وابستگی است (به‌سمت Abstraction)؛ DI دربارهٔ نحوهٔ فراهم کردن آن وابستگی است.

اشتباه رایج

❌ یکی دانستن این دو مفهوم در مصاحبه (این یک اشتباه رایج و پرتکرار است).