Как возвращать один и тот же объект с помощью Dagger2?
Не получается вернуть один и тот же объект с помощью Dagger2.
Вот граф:
@Singleton
@Component
interface DaggerComponent {
fun getCar(): Car
fun getEngine(): Engine
fun getFuel(): Fuel
fun inject(act: MainActivity)
}
class Car @Inject constructor(private var engine: Engine) {
fun showEngine() {
println(engine)
}
}
class Engine @Inject constructor(private var fuel: Fuel)
class Fuel @Inject constructor() {
private val fuel = if (BuildConfig.DEBUG) {
"benzine"
} else {
"diesel"
}
}
Вот код:
class MainActivity : AppCompatActivity() {
@Inject
lateinit var engine:Engine
@Inject
lateinit var car: Car
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
DaggerDaggerComponent.create().inject(this)
car.showEngine() //Выводит testdagger.Engine@cf93bf7
println(engine) //Выводит testdagger.Engine@e6dfa64
}
}
В выводе будут разные хэш коды engine: testdagger.Engine@cf93bf7
testdagger.Engine@e6dfa64
Как с помощью Dagger заставить использовать один и тот же объект Engine?
Ответы (1 шт):
Автор решения: Dmitry Kucherenko
→ Ссылка
В общем навесил дополнительно аннотацию @Singleton над классом Engine и все заработало как надо.