我面临着一个问题,比如我注入的存储库不是Singleton。
我有一个标记为@Singleton的存储库(实际上有很多,但我们简化一下)
@Module
@InstallIn(SingletonComponent::class)
class AppModule {
@Provides
@Singleton
fun provideSettingsRepository(@ApplicationContext context: Context): SettingsRepository {
return SettingsRepositoryImpl(context)
}
}
下面是我的仓库的实现:
class SettingsRepositoryImpl(context: Context) : SettingsRepository {
private var _flow = MutableStateFlow("init value")
override fun getFlow(): StateFlow<String?> = _flow.asStateFlow()
override fun setMyValue(value:String) {
_flow.value = value
}
}
当我把它作为我的服务的一部分使用时(在一些viewModels或其他带有DI的类中),它工作得很好。今天我实现了一个AIDL服务,并想做一些DI。我不得不使用字段注入,因为服务构造函数必须是空的。看起来我的应用程序所做的更新没有在使用服务的“TestApplication”上报告(就像我有两个仓库示例一样)。
这里我的服务代码:
@AndroidEntryPoint
class AppService : Service() {
@Inject lateinit var settingsRepository: SettingsRepository
fun someActionOnMyRepository() {
settingsRepository.setMyValue("whatever")
}
}
当我从我的UI(viewModel或任何其他作为仓库注入的类)设置值时,它并没有在我的服务中更新。
我希望我的settingsRepository是一个单例。我遗漏了什么?是因为字段注入吗?
顺祝商祺
1条答案
按热度按时间hmmo2u0o1#
好的,问题不是来自Hilt,而是关于我如何在AndroidManisfest.xml中声明我的服务
这意味着它就像另一个应用程序示例(所以不再有Singleton / SharedPreferences)。