Dependency Injection - это концепция.
Возможно, вы могли бы "реализовать" DI на функциональных языках, используя это (возможность передавать функции в качестве параметров).
Для достижения DI может быть много способов, и каждый язык может иметь свои способы реализации DI.
DI - это специализированная форма IoC. Таким образом, все DI - это IoC, но не наоборот.
Таким образом, вы правы, говоря, что использование DI приводит к IoC.