Source: https://media.readthedocs.org/pdf/python-di/latest/python-di.pdf