【发布时间】:2018-01-30 13:36:30
【问题描述】:
我正在使用来自 Dagger 2 的新 dagger.android 包在我的项目中注入 Android 依赖项。
- 我需要我的所有活动都是抽象
BaseActivity的子类 -
在我的
BaseActivity中,我有要注入的成员变量。这样:abstract class BaseActivity : AppCompatActivity() { @Inject lateinit var prefs: MyPreferenceDataStore ...// more @Injected members } -
我这样做是因为我希望
BaseActiviy的子类可以访问BaseActivity的注入成员:class SubClassActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle) { val x = prefs.getXXX //use prefs variable from parent class } } -
这是我的应用组件:
@Singleton @Component(modules = arrayOf( ApplicationModule::class, ActivityBindingModule::class, AndroidSupportInjectionModule::class )) interface ApplicationComponent { @Component.Builder interface Builder { @BindsInstance fun application(application: Application): Builder fun build(): ApplicationComponent } fun inject(app: AndroidApplication) } -
ApplicationModule类具有简单的@Provides注释方法:@Module class ApplicationModule { @Singleton @Provides fun providesMyPreferenceDataStore(context: Context): MyPreferenceDataStore { return MyPreferenceDataStoreImpl(context) } // more @Provides annotated methods }我认为问题出在我的
ActivityBindingModule@Module abstract class ActivityBindingModule { @PerActivity @ContributesAndroidInjector( modules = arrayOf(BaseActivityModule::class )) abstract fun bindBaseActivity(): BaseActivity @PerActivity @ContributesAndroidInjector( modules = arrayOf( BaseActivityModule::class )) abstract fun bindSubClassActivity(): SubClassActivity }
这是我迄今为止尝试过的:
使
bindSubClassActivity()方法不依赖于BaseActivityModule::class,没有用。-
将
providesMyPreferenceDataStore从ApplicationModule移动到BaseActivityModule,这样类就是:@Module class BaseActivityModule { @PerActivity @Provides fun providesMyPreferenceDataStore(context: Context): MyPreferenceDataStore { return MyPreferenceDataStoreImpl(context) } }
这是我得到的错误:
Error: [dagger.android.AndroidInjector.inject(T)] com.example.BaseActivity cannot
be provided without an @Provides-annotated method.
This type supports members injection but cannot
be implicitly provided.
【问题讨论】:
-
BaseActivityModule 代码在哪里?
-
嗨@AhmedAbd-Elmeged,请参阅编辑。
标签: android dependency-injection kotlin dagger-2