es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)
}
Tags:  , ,

Answer

  1. Avatar for 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:

    @Module(includes = [AppModule::class])
    class HomeModule {
        // ...
    }
    

    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:

    @Singleton
    @Component(modules = [AppModule::class, HomeModule::class])
    interface HomeComponent {
        fun inject(homeFragment: HomeFragment)
    }
    

    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.

Comments are closed.