Как передать AppCompatActivity в модуль? - PullRequest
0 голосов
/ 19 ноября 2018

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

При компиляции проекта я получаю эту ошибку

ошибка: [Dagger / MissingBinding] [dagger.android.AndroidInjector.inject (T)] android.app.AlertDialog не может быть предоставлен без конструктора @Inject или метода с аннотацией @ Provides. открытый абстрактный интерфейс 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 (Т) Путь к компоненту: 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
}
...