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
...
}
我正在尝试使用一些外部参数实例化 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
...
}