Cómo utilizar dependencias de otro módulo con Dagger2 en Android?
Entonces tengo AppModule y HomeModule.
Me gustaría usar en HomeModule el contexto de la aplicación y AppDatabase de AppModule.
Estoy obteniendo este error: AppDatabase no se puede proporcionar sin un método anotado con @Provides-.
Interfaz pública abstracta HomeComponent
@Singleton
@Component(
modules = [AppModule::class]
)
interface AppComponent {
@Component.Builder
interface Builder {
fun build(): AppComponent
@BindsInstance
fun application(application: Application): Builder
}
}
Este es el AppModule:
@Module
class AppModule {
@Provides
@Singleton
fun provideAppDatabase(app: Application): AppDatabase{
return Room.databaseBuilder(
context,
AppDatabase::class.java,
"app_db"
)
.build()
}
}
@Module
¿Cómo puedo usar las dependencias de AppModule (en este caso AppDatabase y la Application) en HomeModule?
@Module
class HomeModule {
@Provides
@Singleton
fun provideHomeDao(appDatabase: AppDatabase): HomeDao {
return appDatabase.homeDao
}
@Provides
@Singleton
fun provideHomeRepository(homeDao: HomeDao): HomeRepository {
return HomeRepositoryImpl(homeDao)
}
}
El HomeComponent:
@Singleton
@Component(
modules = [HomeModule::class]
)
interface HomeComponent {
fun inject(homeFragment: HomeFragment)
}
davy.ai
Para utilizar las dependencias de AppModule en HomeModule, necesitas agregar AppModule como una dependencia en HomeModule. Puedes hacer esto agregando AppModule a la lista de includes en la anotación HomeModule, de la siguiente manera:
Esto permitirá que HomeModule utilice las dependencias proporcionadas en AppModule.
Luego, en HomeComponent, debes especificar tanto AppModule como HomeModule como módulos utilizando el parámetro modules en la anotación @Component, de la siguiente manera:
Esto asegurará que ambos módulos sean utilizados por HomeComponent y que se proporcionen todas las dependencias correctamente. Ahora puedes utilizar las dependencias de AppModule, como el contexto de la aplicación y AppDatabase, en HomeModule.