В Service Locator класс активно запрашивает центральный реестр о том, что ему нужно во время выполнения, скрывая зависимость внутри тела метода и связывая класс с локатором. DI заставляет класс объявлять то, что ему нужно, без участия реестра. DI предпочтительнее, потому что список зависимостей является явным, а класс можно легко протестировать, передав подделку напрямую.
Итог
В Service Locator класс активно запрашивает центральный реестр о том, что ему нужно во время выполнения, скрывая зависимость внутри тела метода и связывая класс с локатором.