Because I would not recommend Koin at this stage. I am not saying it is a bad framework, but I do not think it is a great framework either. In smaller applications, I find it is trivially easy to write my own Injector and Service Locator (if I need one) using AndroidViewModel and lazy delegates in Kotlin.
In larger applications, Dagger 2 is a much better option in terms of scalability, performance, and it tells you that you have messed about before you even need to deploy.
I’m confused about what you mean with “No code generation — no pain.” Could you clarify this point? My understanding is that compile time code generation is one of the primary reasons to pick Dagger 2 over alternatives.