匕首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)
}
}