Dagger 2 @Component.Builder dependencies missing setters 错误

Dagger 2 @Component.Builder dependencies missing setters error

我正在尝试使用一些外部参数实例化 Dagger(我正在编写一个库),但编译器一直给我以下错误:

error: @Component.Builder is missing setters for required modules or components: [com.example.domain.LibraryClient.Dependency]

Dependency 是一个简单的接口,我用它来获取 Application 以创建空间。

   interface Dependency {
        fun getApplication(): Application
    }

这是我的库组件:

@Singleton
@Component(
        modules = [AndroidInjectionModule::class, AndroidSupportInjectionModule::class, LibraryModule::class],
        dependencies = [LibraryClient.Dependency::class])
    interface LibraryComponent {

        @Component.Builder
        interface Builder {
            @BindsInstance
            fun client(client: LibraryClientImpl): Builder

            fun build(): LibraryComponent
        }

        fun inject(target: LibraryClientImpl)
    }

这是注射器:

object LibraryInjector {

    private var deps: LibraryClient.Dependency? = null

    fun setDependency(dependency: LibraryClient.Dependency) {
        this.deps = dependency
    }

    fun init(client: LibraryClientImpl): LibraryComponent {

    val appComponent = DaggerLibraryComponent.builder()
            .dependency(deps)
            .client(client)
            .build()

        appComponent.inject(client)

        return appComponent
    }
}

我看过一些例子,他们使用 @Component 中的依赖项选项,这似乎是正确的。如果我删除 dependencies = [LibraryClient.Dependency::class] 它会通过构建。我错过了什么?

由于您有 dependencies = [LibraryClient.Dependency::class] 作为 @Component 依赖项,因此您还必须添加相应的 @Component.Builder 方法 (setter)。

interface Builder {
   ...
   fun libraryClient(libraryClient: LibraryClient.Dependency): Builder
   ...
}