Для меня это пример Inversion of Control и Deverdency Inversion Princial, поскольку класс Worker запрашивает ITool из контейнера, а не создает его сам, но на самом деле это не пример внедрения Dependency Injection, поскольку зависимость не «вводится» извне, а «запрашивается» изнутри.
Термины могут быть довольно запутанными и часто используются взаимозаменяемо (неправильно), однако, пока ваш код отделен, чтобы вы не зависели от конкретных реализаций или «новых» вещей в ваших «модулях», то Вы получаете основные преимущества.
Лично очень редко я не делаю инъекцию в конструктор, даже если я не использую всеобъемлющий контейнер - я считаю это самым простым методом для модульных тестов и т. Д.