如何使用 Dagger2 在 ViewModel 构造函数中注入 WorkManager 实例?
How to inject WorkManager instance in a ViewModel constructor with Dagger2?
我想用 Dagger2 注入一个 WorkManager 实例,以便像这样在我的 ViewModel 中使用它
class MyViewModel @Inject constructor(workManager: WorkManager) : ViewModel()
当我尝试为 WorkManager 创建一个模块以提供它的一个实例时,我收到一条错误消息,提示我无法从抽象 class 提供。如何在我的 ViewModel 构造函数中注入 WorkManager 的实例?
要在没有 Dagger 的情况下获得 WorkManager
的实例,您可以使用 WorkManager.getInstance(context)
。要将 WorkManager
放入 Dagger 的对象图中,我们只需将这段代码放在 @Provides
方法中即可。
@Provides
// Maybe @Singleton, though it really doesn't matter.
fun provideWorkManager(context: Context): WorkManager = WorkManager.getInstance(context)
在 Dagger 模块中使用此方法,只要您的组件可以访问 Context
.
,您就可以在任何地方注入 WorkManager
@Module
@InstallIn(SingletonComponent::class)
object YourModule {
@Provides
@Singleton
fun provideWorkManager(@ApplicationContext appContext: Context): WorkManager =
WorkManager.getInstance(appContext)
}
注入 ViewModel:
@HiltViewModel
class YourViewModel @Inject constructor(
val workManager: WorkManager
) : ViewModel() {
我想用 Dagger2 注入一个 WorkManager 实例,以便像这样在我的 ViewModel 中使用它
class MyViewModel @Inject constructor(workManager: WorkManager) : ViewModel()
当我尝试为 WorkManager 创建一个模块以提供它的一个实例时,我收到一条错误消息,提示我无法从抽象 class 提供。如何在我的 ViewModel 构造函数中注入 WorkManager 的实例?
要在没有 Dagger 的情况下获得 WorkManager
的实例,您可以使用 WorkManager.getInstance(context)
。要将 WorkManager
放入 Dagger 的对象图中,我们只需将这段代码放在 @Provides
方法中即可。
@Provides
// Maybe @Singleton, though it really doesn't matter.
fun provideWorkManager(context: Context): WorkManager = WorkManager.getInstance(context)
在 Dagger 模块中使用此方法,只要您的组件可以访问 Context
.
WorkManager
@Module
@InstallIn(SingletonComponent::class)
object YourModule {
@Provides
@Singleton
fun provideWorkManager(@ApplicationContext appContext: Context): WorkManager =
WorkManager.getInstance(appContext)
}
注入 ViewModel:
@HiltViewModel
class YourViewModel @Inject constructor(
val workManager: WorkManager
) : ViewModel() {