В чем разница между Dagger и Toothpick

«В чем разница между Dagger и Toothpick» — вопрос из категории DI, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 — для быстрого прототипирования.