Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匕首2注射不适用于@contributesandroid注射器_Android_Dagger - Fatal编程技术网

匕首2注射不适用于@contributesandroid注射器

匕首2注射不适用于@contributesandroid注射器,android,dagger,Android,Dagger,我将此模块用于我的活动绑定: @Module abstract class ActivityBuilder { @ActivityScope @ContributesAndroidInjector(modules = [BaseActivityModule::class]) abstract fun bindsActivity(): BaseActivity @ActivityScope @ContributesAndroidInjector(modu

我将此模块用于我的活动绑定:

@Module
abstract class ActivityBuilder {

    @ActivityScope
    @ContributesAndroidInjector(modules = [BaseActivityModule::class])
    abstract fun bindsActivity(): BaseActivity

    @ActivityScope
    @ContributesAndroidInjector(modules = [MainActivityModule::class])
    abstract fun bindMainActivity(): MainActivity

}
基本活动模块

ProgressDialogManager

我有以下生成错误:

e: /Users/rafael iteris/Documents/afvc/acelera/app/build/tmp/kapt3/stubs/devProdDebug/br/com/rede/acelera/component/acelera/applicationcomponent.java:6: 错误:[dagger.android.androidjector.injectT] br.com.rede.acelera.util.ProgressManager如果没有 @提供-或@products带注释的方法。e:

e:公共抽象接口AcelerApplicationComponent扩展 dagger.android.androidjector{e: ^e:br.com.rede.acelera.util.ProgressManager在e: br.com.rede.acelera.base.BaseActivity.progress e: br.com.rede.acelera.activity.main.main活动在e: dagger.android.AndroidJector.injectarg0 e:与的绑定 组件中存在匹配的密钥: br.com.rede.acelera.module.ActivityBuilder\u BindsActivity.BaseActivitySubcomponent e:java.lang.IllegalStateException:未能分析: org.jetbrains.kotlin.kapt3.diagnostic.kaptror:while时出错 注释处理


知道为什么吗?

Dagger开始从子类注入依赖项,即使您的AndroidInjection.Injection在基类中,或者您从DaggerAppActivity扩展

然后在ActivityBuilder中查找子类定义

所以,要注入到抽象基类中,您需要通过ActivityBuilder中的模块在它的每个子类中提供依赖关系

@Module
abstract class ActivityBuilder {

    @ActivityScope
    @ContributesAndroidInjector(modules = [MainActivityModule::class, BaseActivityModule::class])
    abstract fun bindMainActivity(): MainActivity

}

尝试使用此BaseActivityModule,并从ProgressDialogManager构造函数中删除@Inject注释

@Module
class BaseActivityModule {

    @Provide
    @ActivityScope
    fun provideProgressDialogManager(activity: BaseActivity): ProgressManager {
       return ProgressDialogManager(activity)
    }
}
@Singleton
@Component(modules = [ApplicationModule::class, AndroidSupportInjectionModule::class, ActivityBuilder::class, ApplicationServiceModule::class, HTTPClientModule::class, ServicesModule::class])
public interface AceleraApplicationComponent : AndroidInjector<DaggerApplication> {

    fun inject(app: AceleraApplication)
    override fun inject(instance: DaggerApplication)

    @Component.Builder
    interface Builder {

        @BindsInstance
        fun application(application: Application): Builder
        fun build(): AceleraApplicationComponent

    }

}
abstract class BaseActivity : DaggerAppCompatActivity(), SalesforceActivityInterface, BaseView {

    private var logger: Logger = br.com.rede.acelera.util.Logger.create(javaClass)
    private var sf: SalesforceActivityDelegate = SalesforceActivityDelegate(this)

    @Inject
    lateinit var progress: ProgressManager

}
@Module
abstract class ActivityBuilder {

    @ActivityScope
    @ContributesAndroidInjector(modules = [MainActivityModule::class, BaseActivityModule::class])
    abstract fun bindMainActivity(): MainActivity

}
@Module
class BaseActivityModule {

    @Provide
    @ActivityScope
    fun provideProgressDialogManager(activity: BaseActivity): ProgressManager {
       return ProgressDialogManager(activity)
    }
}