Dependency inversion is very easy to mistake for dependency injection, and many, including me for a long time, assume that they are equivalent. But as we have seen, dependency inversion focuses on the ownership of the dependencies' abstract definition, and DI is focused on using those abstractions.
By applying DIP with DI, we end up with very well-decoupled packages that are incredibly easy to understand, easy to extend, and simple to test.