Ошибка архитектуры Dagger2 с .Application не реализует dagger. android .HasAndroidInjector - PullRequest
0 голосов
/ 10 июля 2020

Я изучаю Dagger2 и пытаюсь создать очень глупый пример (Mainactivity должен создать экземпляр класса Car).

И я должен справиться с этой ошибкой. Приложение не поддерживает кинжал. android .HasAndroidInjector

, если я правильно понял:

  1. мой компонент должен быть аннотирован @ Component и должен ссылаться на мой модуль @ Module (с некоторыми аннотированными методами @ Provides )
  2. Мне нужно использовать lateinit var для создания экземпляра моего класса и использовать аннотацию @ Inject.

Где я потерпел неудачу?

My MainActivity:

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}")
    }

My AppComponent

@Component(
    modules = arrayOf(AppModule::class)
)
public interface AppComponent : AndroidInjector<AppComponent>{

    @Component.Builder
    interface Builder {

        @BindsInstance
        fun application(application: Application): Builder

        fun buildAppComponent(): AppComponent
    }

My AppModule

@Module
class AppModule {

    companion object{
        @Provides
        fun createCar(): Car {
            return Car("")
        }
    }


}

и до конца sh класс моей машины

data class Car(var name: String)

1 Ответ

0 голосов
/ 10 июля 2020

Решение найдено.

  1. Мне не хватает AndroidSupportInjectionModule :: Class в моем AppComponent
  2. Мне не хватает создания абстрактного метода с аннотацией @ContributesAndroidInjector в моем модуле APP
...