Dependency inversion principle is:
a) High level modules should not depend upon low level modules. Both should depend upon abstractions
b) Abstractions should not depend upon details. Details should depend upon abstractions
Implementing the dependency inversion principle involves using algorithms for defining consumers, service providers, and abstractions in different modules.