【问题标题】:Dagger 2 @Component.Builder dependencies missing setters errorDagger 2 @Component.Builder 依赖项缺少设置器错误
【发布时间】:2020-07-01 16:44:35
【问题描述】:

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

错误:@Component.Builder 缺少所需模块的设置器或 组件:[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] 它会通过构建。我错过了什么?

【问题讨论】:

    标签: android kotlin dagger-2


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 2017-10-20
      • 1970-01-01
      • 2014-12-11
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多