Предпочитаю AndroidInjector.Factory теперь, когда компоненты могут иметь фабрики вместо сборщиков - PullRequest
0 голосов
/ 21 апреля 2020

Что означает это устаревшее предупреждение для AndroidInjector.Builder и как его исправить?

AppComponent.kt

@Component(modules = [AndroidInjectionModule::class, AppModule::class])
@Singleton
interface AppComponent : AndroidInjector<App> {

    @Component.Builder
    abstract class Builder : AndroidInjector.Builder<App>() {

        @BindsInstance
        abstract fun application(@ApplicationContext context: Context)

        @BindsInstance
        abstract fun baseUrl(@Named("baseUrl") baseUrl: String): Builder

        @BindsInstance
        abstract fun secret(@Named("secret") secret: String): Builder

        override fun seedInstance(instance: App) {
            application(instance)
        }
    }
}

App.kt

class App : DaggerApplication(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
        return DaggerAppComponent.builder()
        .baseUrl(SdkConstants.BASE_URL)
        .secret(BuildConfig.SECRET)
        .create(this)
    }

    override fun onCreate() {
        super.onCreate()
    }

    override fun androidInjector() = androidInjector

}

1 Ответ

0 голосов
/ 21 апреля 2020

Я думаю, что у меня есть ответ, @Component.Builder заменяется на:

@Component.Factory
    interface Factory {
        fun create(@BindsInstance @ApplicationContext context: Context,
                   @BindsInstance @Named("baseUrl") baseUrl: String,
                   @BindsInstance @Named("secret") secret: String): AppComponent
    }

В приложении applicationInjector заменяется на:

override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
    return DaggerAppComponent.factory().create(this, SdkConstants.BASE_URL, BuildConfig.SECRET)
}
...