Inversion of Control - абстрактный принцип, набор рекомендаций для написания слабо связанного кода. Каждый компонент системы должен быть как можно более изолированным от других, не полагаясь в своей работе на детали конкретной реализации других компонентов. К примеру фреймворк вызывает пользовательский код. Это отличается от случая с библиотеками, потому что пользовательский код вызывает код библиотеки. Имеет несколько реализаций.
Dependency Injection(DI) - процесс предоставления внешней зависимости программному компоненту. Является специфичной формой Inversion of control(IoC, когда она применяется к управлению зависимостями. В полном соответствии с принципом единственной обязанности объект отдаёт заботу о построении требуемых ему зависимостей внешнему механизму.