我在我的Android应用程序项目中使用hilt
我正在尝试使用 @Provides 和 @Inject 注入继承的子类,如下所示......
但始终存在 UninitializedPropertyAccessException 问题
在我的代码中使用 Hilt 的方法是否有错误?(https://github.com/woosuk0410/MyHilt)
我有一个使用工厂的替代解决方案来解决它,但如果可能的话我想使用@Provides
如果您能提供帮助,我将不胜感激
谢谢
@Singleton
class Engine @Inject constructor() {
fun accel() {
Log.e("SAMPLE", "engine accel")
}
}
@Singleton
open class Car @Inject constructor() {
@Inject
lateinit var engine: Engine
fun accel() {
engine.accel()
}
}
@Singleton
class ElectricCar @Inject constructor() : Car()
@Singleton
class GasolineCar @Inject constructor() : Car()
@Module
@InstallIn(SingletonComponent::class)
object ModuleProvides {
@Provides
fun getCar() :Car {
return if(true) // some condition
ElectricCar()
else
GasolineCar()
}
}
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var car: Car
@Inject
lateinit var factory: AlternativeCarFactory
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//this works fine
// val altCar = factory.getInstance()
// altCar.accel()
// this always makes UninitializedPropertyAccessException a
car.accel()
}
}
@Singleton
class AlternativeCarFactory @Inject constructor() {
@Inject
lateinit var electricCar: ElectricCar
@Inject
lateinit var gasolineCar: GasolineCar
fun getInstance(): Car {
return if (true) electricCar else gasolineCar
}
}
汽车类
open class Car @Inject constructor(private val engine: Engine) {
fun accel() {
engine.accel()
}
}
电动车
@Singleton
class ElectricCar @Inject constructor(private val engine: Engine) : Car(engine){
}
汽油车
@Singleton
class GasolineCar @Inject constructor(private val engine: Engine) : Car(engine) {
}
模块提供
@Provides
fun getCar(engine: Engine): Car {
return if (true) // some condition
ElectricCar(engine)
else
GasolineCar(engine)
}