首页 > 解决方案 > 无法提供 Dagger Component.Factory

问题描述

我必须Component为数据输入提供依赖项:

@Component(modules = [DataInputModule::class])
interface DataInputComponent {
    fun inject(activity: DataInputActivity)

    fun factory(): Factory

    @Component.Factory
    interface Factory {
        fun create(@BindsInstance activity: DataInputActivity, module: DataInputModule): DataInputComponent
    }
}

使用模块:

@Module
class DataInputModule(private val activity: DataInputActivity) {
    @Provides
    fun provideDataInputViewModel(repo: MyRepository, timestampProvider: TimestampProvider) =
        DefaultDataInputViewModel(repo, timestampProvider)

    @Provides
    fun provideTimestampProvider(): TimestampProvider = DefaultTimestampProvider()

    @Provides
    fun provideDateTimeDialogFactory(): DateTimeDialogFactory = DateTimeDialogFactory(activity)
}

我的应用程序的组件如下所示:

@Singleton
@Component(
    modules = [
        DataListModule::class
    ]
)
interface AppComponent : AndroidInjector<MyApplication> {
    @Component.Factory
    interface Factory {
        fun create(@BindsInstance app: MyApplication): AppComponent
    }
}

使用该模块提供可信赖的 Room 数据库和存储库。

尝试构建时出现以下错误:

D:\Applications\AndroidStudioProjects\MyApp\app\build\tmp\kapt3\stubs\debug\com\example\myapp\di\component\DataInputComponent.java:7: 错误:[Dagger/MissingBinding] com.example.myapp。 di.component.DataInputComponent.Factory 不能在没有 @Provides 注释的方法的情况下提供。公共抽象接口 DataInputComponent { ^ com.example.myapp.di.component.DataInputComponent.Factory 在 com.example.myapp.di.component.DataInputComponent.factory() 提供

我无法添加 a @Provides@Component因为它不是模块。我在网上查找了文档,但没有发现任何人“提供”注释和提供@Factory. 那么什么可能导致这里的问题呢?

标签: androiddagger-2

解决方案


推荐阅读