I implemented something that follows quite closely the spirit of dagger2, but that could well be even better for simple use cases.
Often the Testcomponent needs to provide more types than Component, that's when the dagger2 pattern is more powerful
Still recently we simplified this. Because having a singleton means basically that you have a global variable with a reference to some object which is created when your classes are being loaded. So we replaced object with just a global top level declaration of variable and it looks like this.