If those struct members are typed to interfaces and not types, then it's just as testable, too, because you can drop in mocks as required.
What am I missing? This just seems like a way of obfuscating the fact that, in any modern program, we're going to need 3-20 "global variables" that aren't actually global global (but in practice are singletons in the process).