> injection of dependencies should be done via an explicit method/constructor parameter.
Yes! This functional approach is so simple yet so powerful and magicless.
I've recently refactored a small 20k LOC codebase and the first thing I did was to ditch some magical dependency injector in favor of passing dependencies as parameters to functions. Often dependencies are functions themselves making it straightforward to compose and test.