Android 匕首组件。无法提供出厂信息

Android 匕首组件。无法提供出厂信息,android,dagger-2,Android,Dagger 2,我有一个组件为数据输入提供依赖关系: @Component(modules = [DataInputModule::class]) interface DataInputComponent { fun inject(activity: DataInputActivity) fun factory(): Factory @Component.Factory interface Factory { fun create(@BindsInstance

我有一个
组件
为数据输入提供依赖关系:

@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
    }
}
@Singleton
@组成部分(
模块=[
DataListModule::类
]
)
接口组件:AndroidJector{
@组件工厂
接口工厂{
趣味创建(@BindsInstance-app:MyApplication):AppComponent
}
}
与模块一起提供trusty Room数据库和存储库

尝试生成时,我遇到以下错误:

D:\Applications\AndroidStudioProjects\MyApp\app\build\tmp\kapt3\stubs\debug\com\example\MyApp\di\component\DataInputComponent.java:7: 错误:[匕首/缺少绑定] com.example.myapp.di.component.DataInputComponent.Factory无法 在没有@Provides注释方法的情况下提供。公开摘要 接口数据输入组件{ ^ com.example.myapp.di.component.DataInputComponent.Factory提供于 com.example.myapp.di.component.DataInputComponent.factory()


我无法将
@Provides
添加到
@Component
中,因为它不是一个模块。我在网上查找了文档,但没有找到任何“Provides”的示例注释并提供一个
@Factory
。那么是什么导致了这个问题呢?

一个
组件
不能提供一个工厂来构建自己的安装。如果你已经有了一个DataInputComponent,你会使用DataInputComponent.Factory做什么?你打算让DataInputComponent成为AppComponent的一个子组件并拥有一个DataInputComponent.Factory由AppComponent提供?该工厂是在组件中定义的,但不能通过
DataInputComponent
实例访问。请参见此处:我定义的组件与它们一样。现在,
Factory()
方法在我的情况下确实是不必要的,只是出于绝望而添加了它。没有它,同样的问题仍然存在。一般来说,您不能注入
组件的
工厂
s
。您应该使用
DaggeryYourComponentName.Factory()自己创建组件。创建(…)
然后使用componet注入/提供对象。请注意,对于
@子组件的
工厂
而言,这是不同的,那些可以注入父
组件
@al3c true范围内的组件,只看到它按您所说的那样被使用。但我的问题是,我的代码甚至没有编译;我离actu还远着呢如果您删除了试图注入
DataInputComponent.Factory
的代码,那么您的代码至少应该给出一个不同的错误。