С какими DI фреймворками работал

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

Ответ

Работал с Dagger 2, Hilt и Koin.

Dagger 2 – мощный, но требует ручного написания компонентов и модулей. Пример:

@Module
class AppModule {  
    @Provides  
    fun provideContext(app: Application): Context = app  
}  

@Component(modules = [AppModule::class])  
interface AppComponent {  
    fun inject(activity: MainActivity)  
}  

Hilt – упрощённая версия Dagger 2 с аннотациями для Android. Пример:

@HiltAndroidApp  
class MyApp : Application()  

@AndroidEntryPoint  
class MainActivity : AppCompatActivity()  

Koin – лёгкий, но менее производительный. Пример:

val appModule = module {  
    single { MyRepository() }  
}  

startKoin { modules(appModule) }  

Выбор зависит от проекта: Hilt для новых, Koin для быстрого старта, Dagger 2 для сложных случаев.