现在最好使用AndroidInjector.Factory,因为组件可以具有工厂而不是构建器

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

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

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

[我相信我现在有答案,@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)
}
© www.soinside.com 2019 - 2024. All rights reserved.