如果你想在你的Fragment中提供带有构造函数的viewmodel作为依赖项,那么有一种不同的方法,

让我们假设您有一个viewmodel类,如下所示,

class SampleViewmModel(dataManager:DataManager):ViewModel(){

//some logic

}

然后你需要创建一个工厂类来支持上面的viewmodel,如下所示,

class SampleFactory @Inject constructor(var dataManager:DataManager): ViewModelProvider.Factory {

override fun create(modelClass: Class): T {

if (modelClass.isAssignableFrom(SampleViewModel::class)) {

return SampleViewModel(dataManager) as T

}

throw IllegalStateException()

}

}

现在在你的模块类中,你可以按如下方式注入上面的类,(Note-Datamanager类是可注入的)

//Provide Factory

@Provides

fun provideFactory(dataManager:DataManager): SampleFactory {

return SampleFactory(dataManager)

}

//Provide actual viewmodel

@Provides

fun provideViewModel(sampleFactory: SampleFactory): SampleViewModel {

return ViewModelProviders.of(fragment, sampleFactory)[SampleViewModel::class]

}

在你的Fragment中没有,你可以像任何其他依赖一样注入你的viewmodel,

@Injetct

lateinit viewModel:SampleViewModel

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐