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

时间:2019-02-25 05:54:44

标签: android kotlin dependency-injection retrofit dagger-2

当我在演示者中插入一个方法时,我会收到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

现在我的演示者中有一个 ServiceGenerator 类,我也在我的提供者类中提供了该类,并且我正在将我的演示者注入服务生成器。演示者内部的> ServiceGenerator 给出了UninitializedPropertyAccessException的原因是什么,我该如何解决? 演示者类的代码片段,如下所示

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

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

电话出错了,如果做错了请指导我

1 个答案:

答案 0 :(得分:0)

您可以执行以下两项操作之一:

  • 为演示者添加属性/字段注入,在这种情况下,您需要在Component中为其添加一个inject方法,并在演示者中调用它,就像您完成操作一样您的Activity

  • 使用构造函数注入,这样,当演示者的依赖项被注入Activity时,它将“自动”注入:

    class MainPresenter @Inject constructor(
        private val serviceGenerator: ServiceGenerator
    ) : MainContract.Presenter {
    
    }