הרעיון מאחורי Dependecy Injection הוא inverse Of control
הפרדה בין קוד לתלויות שלו
בצורה רגילה כל מחלקה בקוד מכירה את המחלקות האחרות שהיא משתמשת בהן ומייצרת instance כאשר היא צריכה אותן
DI מביא גישה אחרת – מחלקה לא יוצרת בעצמה מופעים של מחלקות אחרות שהיא צריכה
אלא מגדירה איזה interface היא משתמשת ומקבלת את ה instance מבחוץ (כמו שהסבירה @racheliW – לעיתים קרובות בבנאי)
ובעצם הצרכן של הקוד הוא זה שאחראי לייצר instance מהclass המתאים לכל interface
היתרון בהפרדה הזו – זה הפרדה בין הלוגיקה עצמה לבין כל תלות אחרת (כמו למשל DB או third party)
זה שימושי במיוחד עבור unitests אבל לא רק, יש עוד מקרים שמצריכים את הגמישות הזו