Ответ
Dagger — это статически типизированный DI-фреймворк с кодогенерацией, который использует аннотации (@Inject, @Module, @Component и др.). Он сложнее в настройке, но обеспечивает высокую производительность за счет компиляторной проверки зависимостей.
Toothpick — более легковесный DI-фреймворк, работающий через рефлексию (без кодогенерации). Проще в освоении, но менее производительный и без проверки зависимостей на этапе компиляции.
Пример Dagger:
@Component
interface AppComponent {
fun inject(activity: MainActivity)
}
Пример Toothpick:
val scope = Toothpick.openScope("APP")
scope.installModules(module {
bind<ApiService>().toInstance(RetrofitApi())
})
Dagger лучше для больших проектов, Toothpick — для быстрого прототипирования.