Кинжал инъекции не работает в Котлин

Кто-то помогает мне указать, почему мой код не работает. Я пытаюсь выяснить, но я не могу выяснить проблему, которую я пытаюсь вводить презентатору, но я получил ошибку:

lateinit property appComponent has not been initialized 

Похоже, что презентатор не был введен в AppModule

 @Module class AppModule { @Provides @Singleton fun provideMainPresenter(): MainActivityContract.Presenter = MainActivityPresenter() } 

AppComponent

 @Singleton @Component(modules = arrayOf(AppModule::class)) interface AppComponent { fun inject(target: MainActivity) } 

Приложение

 class App: Application() { companion object { lateinit var appComponent: AppComponent } override fun onCreate() { super.onCreate() appComponent = initDagger() } fun initDagger() = DaggerAppComponent.create() } 

Это MainActivity, где я хочу, чтобы

 class MainActivity : AppCompatActivity(), MainActivityContract.View, AnkoLogger { @Inject lateinit var presenter: MainActivityContract.Presenter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) App.appComponent.inject(this) presenter.attachView(this) } } 

Это MainActivityPresenter, который реализует MainActivityContract.Presenter

 class MainActivityPresenter: MainActivityContract.Presenter { var view: MainActivityContract.View? = null override fun attachView(view: MainActivityContract.View) { this.view = view } override fun detachView() { view = null } override fun performToast(text: String) { } } 

Редактировать: мне удалось решить это самостоятельно: для всех начинающих Android, как и я. Когда мы объявляем приложение Extends Application. Мы должны также заявить об этом в манифесте

 <application android:name=".App" /> 

В MainActivity вы можете заменить код:

 @Inject lateinit var presenter: MainActivityContract.Presenter 

для

 @field:[Inject] lateinit var presenter: MainActivityContract.Presenter 

Вы не можете определить статическую переменную как lateinit и ожидать onCreate() для ее инициализации. Попробуйте что-то вроде этого:

 class GlobalApplication : Application() { companion object { lateinit var globalApp: GlobalApplication } internal var mApplicationComponent: ApplicationComponent? = null get override fun onCreate() { super.onCreate() globalApp = this //Init Timber if (BuildConfig.DEBUG) { Timber.plant(Timber.DebugTree()) } //Init application component mApplicationComponent = DaggerApplicationComponent.builder() .applicationModule(ApplicationModule(this)) .build() mApplicationComponent?.inject(this) //Ignore URI exposure val builder = StrictMode.VmPolicy.Builder() StrictMode.setVmPolicy(builder.build()) } } 

Из этого проекта: https://github.com/Obaied/Sohan/blob/master/app/src/main/java/com/obaied/sohan/GlobalApplication.kt

Intereting Posts
Кажется, это ошибка в библиотеке поддержки дизайна Когда использовать методы расширения? У Kotlin есть array.indexOf, но я не могу понять, как это сделать array.indexOfBy {lambda} Нет файла kotlin.js, сделанного kotlinc-js Эквивалент текста для ImageView Анко не запускается Функция расширения kotlin не понимает, как эта вещь работает Android Kotlin меняет свой массив на spinner на карту Котлин: фигурные скобки вокруг нескольких выражений (или высказываний) Библиотека «Столкновение с пространством» вылетает со смертельным исходом 11 (SIGEGV) при вставке и удалении Неожиданные жетоны (используйте, чтобы разделить выражения в одной строке) Kotlin – видимость атрибута для сопутствующего объекта Я сейчас разрабатываю приложение для Android с Kotlin, но произошла ошибка: CompilationException: не удалось встроить метод в 'readText' Kotlin: Как дочерний класс может использовать функцию расширения родителя в вызове супер-конструктора? Java 2-минутная задержка иногда при подключении сокета?