【发布时间】:2020-10-31 09:15:50
【问题描述】:
我正在学习 Dagger2,我正在尝试构建一个非常愚蠢的示例(Mainactivity 必须实例化一个 Car 类)。
我必须处理这个错误。应用程序没有实现 dagger.android.HasAndroidInjector
如果我理解正确的话:
- 我的组件需要被注解@Component并且必须引用我的模块@Module(带有一些注解的方法@Provides)李>
- 我必须使用 lateinit var 来实例化我的类并使用注解 @Inject。
我哪里失败了?
我的主要活动:
class MainActivity : DaggerAppCompatActivity() {
@Inject
lateinit var car: Car
public var brand: String = "Peugeot"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
DaggerAppComponent.builder().application(application).buildAppComponent()
car.name = brand
Log.e("CarText", "onCreate: ${car.name}")
}
我的应用组件
@Component(
modules = arrayOf(AppModule::class)
)
public interface AppComponent : AndroidInjector<AppComponent>{
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun buildAppComponent(): AppComponent
}
我的应用模块
@Module
class AppModule {
companion object{
@Provides
fun createCar(): Car {
return Car("")
}
}
}
完成我的汽车课
data class Car(var name: String)
【问题讨论】:
-
实际上,我错过了两件事。第一个是我的 AppComponent 中的 AndroidSupportInjectionModule::class,最后一个是我的 AppModule 中带有 @ContributesAndroidInjector 注释的抽象方法
标签: android kotlin dependency-injection dagger-2