Dagger 2 @ Component.Builder зависимости отсутствующих сеттеров ошибка - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь создать экземпляр Dagger , используя некоторые внешние параметры (я пишу библиотеку), но компилятор продолжает выдавать мне следующую ошибку:

error: @Component. В построителе отсутствуют сеттеры для необходимых модулей или компонентов: [com.example.domain.LibraryClient.Dependency]

Зависимость - это простой интерфейс, который я использую для получения приложения для чтобы создать комнату.

   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], он проходит сборку. Чего мне не хватает?

1 Ответ

1 голос
/ 20 марта 2020

Поскольку у вас есть dependencies = [LibraryClient.Dependency::class] как @Component зависимость, вы должны также добавить соответствующий @Component.Builder метод (установщик).

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