Saturday, 31 December 2022

Hilt - Question on making a Dao object in a module a Singleton

I'm following the tutorial on dependency injection with Hilt using the Google Sunflower app repo:

@InstallIn(SingletonComponent::class)
@Module
class DatabaseModule {

    @Singleton
    @Provides
    fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
        return AppDatabase.getInstance(context)
    }

    @Provides
    fun providePlantDao(appDatabase: AppDatabase): PlantDao {
        return appDatabase.plantDao()
    }

    @Provides
    fun provideGardenPlantingDao(appDatabase: AppDatabase): GardenPlantingDao {
        return appDatabase.gardenPlantingDao()
    }
}

https://github.com/android/sunflower/blob/main/app/src/main/java/com/google/samples/apps/sunflower/di/DatabaseModule.kt

I noticed they did not use the Singleton annotation for the two functions below provideAppDatabase().

Does this mean that by using the Singleton annotation on provideAppDatabase, automatically make the two functions providePlantDao() and provideGardenPlantingDao() Singletons?


Other tutorials I've checked, annotate the Dao provide functions with @Singleton.

@Module
@InstallIn(SingletonComponent::class)
object DbModule {
    @Provides
    @Singleton
    fun provide(@ApplicationContext context: Context) = Room.databaseBuilder(
        context, NoteDatabase::class.java, NOTE_DATABASE)
        .allowMainThreadQueries()
        .fallbackToDestructiveMigration()
        .build()

    @Provides
    @Singleton
    fun provideDao(db: NoteDatabase) = db.noteDoa()
  
}

https://androidgeek.co/how-to-use-hilt-with-room-database-complete-guide-part-2-2c2bbf52f610

So I'm confused on to annotate or not to.



from Hilt - Question on making a Dao object in a module a Singleton

No comments:

Post a Comment