当我在演示者中使用@inject时,会发生UninitializedPropertyAccessException

问题描述 投票:0回答:1

当我在演示者中注入方法时,我得到UninitializedPropertyAccessException

我的提供者类

@Module
class ActivityModule(private var activity: BaseActivity) {

@Provides
fun provideActivity(): BaseActivity {
    return activity
}


@Provides
@Inject
fun providePresenter(): MainContract.Presenter {
    return MainPresenter()
}

@Provides
@Singleton
fun provideGson(): Gson {

    return GsonBuilder().setLenient().create()
}

@Provides
@Inject
@Singleton
fun provideServiceGenerator(): ServiceGenerator {

    return ServiceGenerator()
 }
}

我的组件类

@Component(modules = [ActivityModule::class])
interface ActivityComponent {
fun inject(mainActivity: MainActivity)
}

在我的Activity类中,我正在注入如下所示的组件

val activityComponent = DaggerActivityComponent.builder()
        .activityModule(ActivityModule(this))
        .build()
    activityComponent.inject(this)

所有工作正常按钮点击我呼叫一个api正如你在我提供的看到我有MainContract.Presenter,我在我的活动注入演示者并成功注入。

@Inject
lateinit var presenter: MainContract.Presenter

现在在My Presenter中有一个ServiceGenerator类,我也在我的提供者类中提供,我在我的演示者中注入服务生成器,问题发生在我调用演示者时,演示者内部注入的ServiceGenerator给出UninitializedPropertyAccessException是什么原因导致的它,我该如何解决这个问题?演示者类的片段如下所示

class MainPresenter : MainContract.Presenter {
@Inject
lateinit var serviceGenerator: ServiceGenerator

当我去val newsService = serviceGenerator.createService(ApiService::class.java,Constants.BASE_URL)

打电话给我错误,如果我做错了,请指导我

android kotlin dependency-injection retrofit dagger-2
1个回答
0
投票

你可以做以下两件事之一:

  • 坚持使用属性/字段注入为您的演示者,在这种情况下,您需要在您的组件中添加一个inject方法,并在您的演示者中调用它,就像你已经完成了你的Activity
  • 使用构造函数注入,这样,当它在Activity中注入时,“自动”注入演示者的依赖项: class MainPresenter @Inject constructor( private val serviceGenerator: ServiceGenerator ) : MainContract.Presenter { }
© www.soinside.com 2019 - 2024. All rights reserved.