The dependency inversion (DI) principle states, Depend upon abstractions. Do not depend upon concretions. In the LSP, we implemented a class named FavouritesController. In the example, it was possible to replace an implementation of PersistanceServiceInterface with another without having to perform any additional change to FavouritesController.
We followed the DI principle, as FavouritesController has a dependency upon PersistanceServiceInterface (abstraction):
The preceding can be implemented as follows:
class FavouritesController { private _persistanceService: PersistanceServiceInterface; public ...