如何使用Dagger2在ViewModel构造函数中注入WorkManager实例?

4

我希望使用Dagger2注入WorkManager实例,以便在我的ViewModel中使用它,就像这样:

class MyViewModel @Inject constructor(workManager: WorkManager) : ViewModel()

当我试图创建一个WorkManager的模块以提供它的实例时,我得到了一个错误,说我不能从一个抽象类中提供。那么我该如何在我的ViewModel构造函数中注入WorkManager的实例呢?
2个回答

5
@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() { 

4

如果不使用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


非常好用。非常感谢@Nitrodon。 - dudi
正确的方式:@ApplicationContext appContext:Context - Homan Huang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接