What is the Dependency inversion principle and how it is used in Magento 2