Oh ,and while I'm at it, literally everything is defined twice, once in an interface, once in an implementation.
Even though there are no other implementations.
Why? Seems to boil down to "our language / environment / DI system / mocking framework is incapable of working unless you do it this way.
Yet more cognitive and implementational waste.