Lewati ke konten utama

Dependency Injection

Setiap project wajib menggunakan Dependency Injection (DI) untuk memudahkan testing dan decoupling.

Rekomendasi per Platform​

PlatformDI FrameworkTipe
AndroidHilt (recommended) / KoinCompile-time / Runtime
iOSFactory / swift-dependenciesRuntime
FlutterGetIt + InjectableRuntime
React NativeManual DI / tsyringeManual / Runtime

Prinsip​

  1. Constructor Injection — Selalu inject dependency melalui constructor.
  2. Program to Interface — Inject interface, bukan implementasi langsung.
  3. Single Responsibility — Setiap module DI bertanggung jawab atas satu scope.
@Module
@InstallIn(SingletonComponent::class)
abstract class RepositoryModule {
@Binds
@Singleton
abstract fun bindUserRepository(
impl: UserRepositoryImpl
): UserRepository
}

@Module
@InstallIn(ViewModelComponent::class)
object UseCaseModule {
@Provides
fun provideGetUserUseCase(
repository: UserRepository
): GetUserUseCase = GetUserUseCase(repository)
}