Maybe easier would be to think about it as:
1. If I need to do some work on particular dispatcher (because it's heavy CPU, or maybe some kind limited database pool etc), inject dispatcher, but often coroutines code can decide for itself, if Default/IO/Main is enough for you and just use Dispatchers and no need to inject
2. If you want to launch a new background coroutine, you have to inject scope
If your class includes only suspend functions, no background job and default dispatchers covers your use cases, no need to inject anything