错误:@ Component.Builder缺少Dagger 2中所需模块或组件的setter,而不是使用setter方法

问题描述 投票:0回答:1

我是dagger 2的新手。我在kotlin上制作了CarComponent,我试图用horsePower值调用DaggerCarComponent而不调用petrolEngineModule。以下是我的代码:

import dagger.BindsInstance
import dagger.Component
import javax.inject.Singleton

@Component (
    modules = [WheelModule::class, PetrolEngineModule::class]
)
interface CarComponent {

    fun getCar(): Car

    fun inject(mainActivity: MainActivity)

    @Component.Builder
    interface Builder {

        @BindsInstance
        fun horsePower(horsePower : Int) : Builder

        fun build(): CarComponent
    }
}

这是PetrolEngine.kt:

package com.example.daggerapp

import android.util.Log
import javax.inject.Inject

class PetrolEngine : Engine {

    private var horsePower : Int

    @Inject constructor(horsePower: Int){
        this.horsePower = horsePower
    }

    override fun start() {
        Log.d("Engine", "Broom..., horsePower: ${this.horsePower}")
    }
}

这是PetrolEngineModule.kt:

package com.example.daggerapp

import dagger.Module
import dagger.Provides
import javax.inject.Inject

@Module
class PetrolEngineModule {

    private var horsePower: Int

    @Inject constructor(horsePower: Int) {
        this.horsePower = horsePower
    }

    @Provides
    fun provideHorsePower(): Int {
        return horsePower
    }

    @Provides
    fun provideEngine(engine: PetrolEngine): Engine
    {
        return engine
    }
}

我正在学习本教程:https://www.youtube.com/watch?v=3tIvekCTSJg&list=PLrnPJCHvNZuA2ioi4soDZKz8euUQnJW65&index=8

android android-studio kotlin dagger-2 dagger
1个回答
0
投票

在初始化CarComponent的MainActivity中,您需要传递PetrolEngineModule的实例,如:

DaggerCarComponent.builder().petrolEngineWithHpModule(PetrolEngineWithHpModule(100)).build()

Dagger不知道如何初始化PetrolEngineModule,但是我不认为您可以在模块中使用@Inject。

© www.soinside.com 2019 - 2024. All rights reserved.