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 دربارهٔ نحوهٔ فراهم کردن آن وابستگی است.

اشتباه رایج

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