Я пытаюсь внедрить контекст приложения в класс, который дает
"приложение свойства lateinit не инициализировано"
исключение.
CoreModule.kt
@Module
open class CoreModule {
@Singleton
@Provides
fun provideRealmHelper(): RealmHelper {
return RealmHelper()
}
}
MyApplication.kt
open class MyApplication : MultiDexApplication(), HasActivityInjector {
@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
val log = LoggerFactory.getLogger(this.javaClass)!!
companion object {
var application: MyApplication? = null
fun getInstance(): MyApplication {
return application!!
}
}
override fun onCreate() {
try {
super.onCreate()
application = this
DaggerAppComponent.builder().application(this).build().inject(this)
} catch (e: Exception) {
log.error("Exception in Application", e)
Thread.setDefaultUncaughtExceptionHandler(GlobalExceptionHandler())
}
}
override fun activityInjector() = dispatchingAndroidInjector
}
AppComponent.kt
@Singleton
@Component(modules = [AndroidSupportInjectionModule::class,CoreModule::class])
interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MyApplication): Builder
fun build(): AppComponent
}
fun inject(myApplication: MyApplication)
fun inject(realmHelper: RealmHelper)
}
// Мне нужен контекст приложения в этом классе. Я вставляю applicationContext здесь. Инъекция является правильным способом, или я должен использовать инжектор конструктора?
RealmHelper.kt
class RealmHelper @Inject constructor() {
//need application context here but getting "lateinit property application has not been initialized
@Inject
lateinit var application: MyApplication
init {
Realm.init(application) // null application
}
}
Примечание: MyApplication добавлен в AndoridManifest.xml