lateinit属性尚未使用dagger2初始化

时间:2019-05-19 08:46:21

标签: android kotlin dagger-2 android-mvvm

我是Android的新手,我正在尝试使用Dagger2和MVVM模式以及kotlin创建一个应用程序,但是我无法使其运行。

我的应用程序类代码。

class PruebaDaggerApp: Application(), HasActivityInjector, HasSupportFragmentInjector {

@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>

@Inject
lateinit var fragmentInjector: DispatchingAndroidInjector<Fragment>

override fun onCreate() {
    super.onCreate()
    DaggerAppComponent.builder().build().inject(this)

}


override fun activityInjector(): AndroidInjector<Activity> = activityInjector

override fun supportFragmentInjector(): AndroidInjector<Fragment> = fragmentInjector

}

我的AppComponent。

@Singleton
@Component(modules = [AndroidSupportInjectionModule::class, AppModule::class, ActivityModule::class])
interface AppComponent {

     fun inject(app: Application)

}

ActivityModule代码

@Module
abstract class ActivityModule {
@ContributesAndroidInjector(modules = [FragmentModule::class])
    abstract fun contributesMainActivity(): MainActivity
}

FragmentsModule代码

@Module
abstract class FragmentModule {

   @ContributesAndroidInjector
   abstract fun contributesCardFrament(): CardFragment

}

AppModule代码

@Module(includes = [ViewModelModule::class])
class AppModule(val app: PruebaDaggerApp) {

@Provides
@Singleton
fun provideApplicationContext(): Context = app.applicationContext

 }

ViewModelModule

@Module
abstract class ViewModelModule {

    @Binds
    abstract fun bindViewModelFactory(viewModelFactory: DaggerViewModelFactory): ViewModelProvider.Factory

    @Binds
    @IntoMap
    @ViewModelKey(CardViewModel::class)
    abstract fun bindCardViewModel(viewModel: CardViewModel): ViewModel


    }
  

原因:kotlin.UninitializedPropertyAccessException:lateinit属性activityInjector尚未初始化           在org.ottochamo.pruebadagger.PruebaDaggerApp.activityInjector(PruebaDaggerApp.kt:28)           在dagger.android.AndroidInjection.inject(AndroidInjection.java:56)           在dagger.android.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:43)           在org.ottochamo.pruebadagger.MainActivity.onCreate(MainActivity.kt:14)           在android.app.Activity.performCreate(Activity.java:6980)           在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)           在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2828)

我一直在关注很多文章,但我无法使其正常运行。非常感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您正在做

preform(segue...)

但是您没有为构造函数中所需的AppModule提供appContext:

    DaggerAppComponent.builder().build().inject(this)

因此,您应该像这样创建AppComponent:

class AppModule(val app: PruebaDaggerApp) {}

答案 1 :(得分:0)

我的问题是我请求注入Application而不是我的班级PruebaDaggerApp并解决了问题:)