【发布时间】:2021-04-04 08:36:47
【问题描述】:
我正在尝试根据他们登录的用户 ID 提供不同的数据库,以便每个用户都可以拥有自己的数据库,如果您使用不同的帐户登录。我不想提供“所有者”字段,我尝试过但不喜欢它。
现在的问题是,数据库的范围仅限于应用程序范围,因此一旦用户注销并重新登录,就不会重新创建数据库。只有在重新启动应用程序时才会创建正确的数据库。
如何使用 Hilt 实现这种行为?
这就是现在的样子:
@InstallIn(SingletonComponent::class)
@Module
object ModuleDatabase {
@Provides
@Singleton
fun provideAppDatabase(
@ApplicationContext context: Context,
userManager: UserManager,
): MyRoomDatabase {
return Room.databaseBuilder(context, MyRoomDatabase::class.java, LOCAL_DATABASE_NAME + "_${userManager.loggedInUid()}")
.addMigrations(...)
.fallbackToDestructiveMigration()
.build()
}
}
【问题讨论】:
-
我猜你可以使用
@Named注入。但我不确定结果如何。 -
不完全确定这应该如何工作
-
developer.android.com/training/dependency-injection/… 勾选这个。我认为您可以使用带有数据库名称的
@Named注释而不是Qualifier注释。它仍然是一个 Singleton,但它会针对该数据库名称创建一个实例,并且可以说注销并使用新用户登录,名称将被更改,它将创建该 DB 的新 Singleton 实例。目前这只是一个理论,我从未使用过多个数据库。
标签: android dagger-2 android-jetpack dagger-hilt