@TikTak1236

Как передать модулю AppCompatActivity?

Здравствуйте!
Я у себя в проекте использую Dagger 2. У меня в проекте есть несколько модулей.
И у меня есть BaseActivityModule, который подключается каждому модулю Activity.
Как получить AppCompatActivity в BaseActivityModule.

При компиляции проекта получаю такую ошибку
error: [Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] android.app.AlertDialog cannot be provided without an @Inject constructor or an @Provides-annotated method.
public abstract interface AppComponent {
                ^
      android.app.AlertDialog is injected at
          com.example.laptop.daggerexample.ui.main.view.MainActivity.alertDialog
      com.example.laptop.daggerexample.ui.main.view.MainActivity is injected at
          dagger.android.AndroidInjector.inject(T)
  component path: 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
}
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы