我是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
在初始化CarComponent的MainActivity中,您需要传递PetrolEngineModule的实例,如:
DaggerCarComponent.builder().petrolEngineWithHpModule(PetrolEngineWithHpModule(100)).build()
Dagger不知道如何初始化PetrolEngineModule,但是我不认为您可以在模块中使用@Inject。