我在项目中使用Dagger 2。我在项目中有几个模块。 我有一个BaseActivityModule连接到每个Activity模块。 如何在BaseActivityModule中获取AppCompatActivity。
编译项目时,出现此错误
错误:[Dagger / MissingBinding] [dagger.android.AndroidInjector.inject(T)]如果没有@Inject构造函数或@Provides注释的方法,则无法提供android.app.AlertDialog。 公共抽象接口AppComponent { ^ android.app.AlertDialog被注入 com.example.laptop.daggerexample.ui.main.view.MainActivity.alertDialog com.example.laptop.daggerexample.ui.main.view.MainActivity在以下位置注入 dagger.android.AndroidInjector.inject(T) 组件路径:com.example.laptop.daggerexample.di.component.AppComponent? com.example.laptop.daggerexample.di.builder.ActivityBuilder_BindMainActivity.MainActivitySubcomponent
项目中以下模块的示例
ActivityBuilder
@Module
abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = [(MainActivityModule::class)])
abstract fun bindMainActivity(): MainActivity
}
AppModule
@Module
abstract class AppModule{
@Provides
@Singleton
fun provideContext(application: Application): Context = application
}
BaseActivityModule
@Module
class BaseActivityModule {
@Provides
fun provideAlertDialog(activity: AppCompatActivity)=
AlertDialog.Builder(activity).create()
}
MainActivityModule
@Module(includes = [(BaseActivityModule::class)])
class MainActivityModule {
@Provides
fun provideMainMVPView(activity: MainActivity): MainMVPView = activity
@Provides
fun provideMainMVPPresenter(presenter: MainPresenter<MainMVPView>):
MainMVPPresenter<MainMVPView> = presenter
}