gpt4 book ai didi

android - Dagger2 依赖组件

转载 作者:行者123 更新时间:2023-12-02 13:23:35 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个具有应用程序范围的组件(与 Singleton 相同),它提供了一个 ViewModel 工厂,以及一个具有 Activity 范围的依赖组件,它将工厂注入(inject) fragment 中。

应用组件定义如下:

@Component(modules = [AppModule::class, /* other stuff */, ViewModelModule::class])

@ApplicationScope
interface AppComponent {
fun inject(app: Application)

/* other stuff */

val viewModelFactory: ViewModelFactory
}

View 模型模块定义如下:
@ApplicationScope
@Module
abstract class ViewModelModule {
@Binds
abstract fun bindViewModelFactory(viewModelFactory: ViewModelFactory): ViewModelProvider.Factory

@Binds
@IntoMap
@ViewModelKey(DisplayEntryViewModelImpl::class)
abstract fun bindDisplayEntryViewModel(displayEntryViewModelImpl: DisplayEntryViewModelImpl): ViewModel
}

Activity 范围组件定义如下:
@Component(dependencies = [AppComponent::class], modules = [DisplayEntryActivityModule::class])

@ActivityScope
interface DisplayEntryActivityComponent {
fun inject(displayEntryActivity: DisplayEntryActivity)
fun inject(displayEntryFragment: DisplayEntryFragment)
}

当我尝试在 fragment 中注入(inject) View 模型工厂时,出现此错误:
error: android.arch.lifecycle.ViewModelProvider.Factory cannot be provided without an @Provides- or @Produces-annotated method.

如果我更新 Activity 组件以包含 View 模型模块,就像这样
@Component(dependencies = [AppComponent::class], modules = [DisplayEntryActivityModule::class, ViewModelModule::class])

@ActivityScope
interface DisplayEntryActivityComponent {
fun inject(displayEntryActivity: DisplayEntryActivity)
fun inject(displayEntryFragment: DisplayEntryFragment)
}

然后它编译。我的理解是,如果父组件显式提供这些成员,则依赖组件可以访问来自父组件的注入(inject)成员,就像我在这里所做的那样
 val viewModelFactory: ViewModelFactory

那么为什么我还需要在 Activity 范围组件中提供 View 模型模块呢?

最佳答案

使用依赖项时,dagger 将使用该组件来注入(inject)成员。
父组件必须显式声明可以在子组件中使用的对象。

@Component(modules = [AppModule::class, /* other stuff */, ViewModelModule::class])
@ApplicationScope
interface AppComponent {
fun inject(app: Application)

fun viewModelFactory(): ViewModelProvider.Factory

fun viewModel(): ViewModel
}

你可以看看这篇文章:
https://proandroiddev.com/dagger-2-part-ii-custom-scopes-component-dependencies-subcomponents-697c1fa1cfc

关于android - Dagger2 依赖组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com