首页 > 解决方案 > 如何在模块中添加视图模型?

问题描述

在 Dagger 中,如何将模型添加到模块?例如,我通过以下方式添加了演示者:

@Module
class AboutModule(val appContext: Context) {

    @FragmentScope
    @Provides
    fun providePresenter(): AboutListContract.Presenter {
        return AboutListPresenter(appContext = appContext)
    }
}

现在我想添加我的视图模型,还有 appContext。

class AboutViewModel(val appContext: Context): ViewModel() {

更新: 我可以像这样添加我的视图模型吗?

@Module

    class AboutModule(val appContext: Context) {

        @FragmentScope
        @Provides
        fun provideModel(model: AboutViewModel): ViewModel {
            return AboutViewModel(appContext = appContext)
        }
    }

标签: androidmvvmdagger-2android-viewmodel

解决方案


我用下一个解决方案解决了我的问题:

@Module
class AboutModule(val appContext: Context) {

    @FragmentScope
    @Provides
    fun provideFactory(): AboutViewModelFactory {
        return AboutViewModelFactory(appContext)
    }
}

在片段中这样写: class AboutFragment : BaseFragment(), OnItemClickListener {

lateinit var viewModel: AboutViewModel
@Inject lateinit var viewModelFactory: AboutViewModelFactory

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    injectDependencies()

    viewModel = ViewModelProviders
        .of(this, viewModelFactory)
        .get(AboutViewModel::class.java)
}

private fun injectDependencies() {
    activity?.let {
        DaggerAboutComponent.builder().aboutModule(AboutModule(it)).build().inject(this)
    }
}

很好的建议:https ://stackoverflow.com/a/60884492/6387618


推荐阅读