این مفاهیم با آنکه در هم تنیده و مربوط به هم هستند اما هر کدام به مفهوم و فلسفه ای متفاوت در توسعه در نرم افزار اشاره می کنند. اما متاسفانه می بینیم که هر کدام از این ها به جای دیگری استفاده می شود و این ها معنیِ واضح شان را در ادبیات روزمره خیلی از ما از دست داده اند.
اگر چه درک و کاربرد این مفاهیم برای تازه کار تر ها مشخص نیست، اما به هر حال دنیای مدرن توسعه نرم افزار بر روی این اصول سوار شده است. این اصول دیگر آنقدر بدیهی و همه جایی هستند که در ASPNET Core علنا به عضوی تفکیک ناپذیر از فریم ورک تبدیل شده اند و هر کس به نوعی مجبور خواهد بود با این مفاهیم سر و کله بزند.
در مطالب زیر مارتین فاولرِ بزرگ، این مفاهیم را روشن و مشخص کرده اند.
* مطلبی در مورد Inversion Of Control که خاصیت ذاتی فریم ورک هاست و چیزی که آن ها را از کتابخانه ها متمایز می کند:
http://martinfowler.com/bliki/InversionOfControl.html
* مطلبی معروف و مرجع در شرح مفهوم Dependency Injection و تفاوتش با Inversion Of Control.
http://martinfowler.com/articles/injection.html
توجه شود که مفهوم Dependency Injection به کتابخانه هایی نظیر Structuremap و Ninject و Autofac و غیره وابسته و گره خورده نیست. بلکه این کتابخانه ها صرفا ابزارهایی هستند که بخشی از کارشان ساده سازیِ کاربرد Dependency Injection در نرم افزارهای ما می باشد. بدون این ها هم می توانیم (و البته باید) اصل Dependency Inversion را رعایت کرده و از Dependency Injection هم استفاده کنیم.