В методе @ subcomponent.factory отсутствуют параметры для необходимых модулей или субкомпонентов. - PullRequest
0 голосов
/ 03 февраля 2020

Я внедряю Presenter в BookDashboard (Activity) и BookDashboardPresenter класс требует MvpView interface в своем конструкторе.

Когда я запускаю

AppComponent

@Component(
    modules = [
        AndroidInjectionModule::class,
        ActivityBuilder::class
    ]
)
@Singleton
interface AppComponent : AndroidInjector<App> {

    @Component.Builder
    interface Builder {

        fun addContext(@BindsInstance context: Context): Builder
        fun addBookEngine(@BindsInstance bookEngineModule: BookEngineModule) :Builder
        fun build(): AppComponent
    }
}

ActivityBuilder.kt

@Module
abstract class ActivityBuilder {

    @ContributesAndroidInjector(modules = {BookEngineModule.class})
    public abstract BookDashboard bindBookDashboard();
}

BookEngineModule.kt

@Module
class BookEngineModule(val mvpView: BookDashboardContract.MvpView){

    @Provides
    fun providePresenter():BookDashboardContract.Presenter{
        return BookDashboardPresenter(mvpView)
    }
}

BookDashboardContract

interface BookDashboardContract {

  interface MvpView{
    fun displayBooks()
    fun showProgress()
    fun hideProgress()
  }

  interface Presenter{
    fun fetchedBooks()
  }
}

BookDashboardPresenter.kt

class BookDashboardPresenter @Inject constructor(val viewContract:BookDashboardContract.MvpView) : BookDashboardContract.Presenter{

    val bookInteractor = BookInteractor(this)

    override fun fetchedBooks() {
        bookInteractor.fetchDataFromServer()
        viewContract.displayBooks()
    }
}

BookDashboard -> Активность

class BookDashboard : DaggerAppCompatActivity(),BookDashboardContract.MvpView{

    @Inject
    lateinit var presenter: BookDashboardContract.Presenter

    override fun onCreate(savedInstanceState: Bundle?) {
        DaggerAppComponent.builder().addContext(this).
            addBookEngine(BookEngineModule(this)).build()
        super.onCreate(savedInstanceState)
        ///presenter.fetchedBooks()

    }

    override fun displayBooks() {
        Toast.makeText(this,"Books Displayed",Toast.LENGTH_LONG).show()
    }

    override fun showProgress() {}
    override fun hideProgress() {}
}

Но при создании проекта у меня возникает ошибка ниже

ActivityBuilder_BindBookDashboard.java:24: error: @Subcomponent.Factory method is missing parameters for required modules or subcomponents: [quiz.mania.trivia.mcq.question.di.BookEngineModule]
    interface Factory extends AndroidInjector.Factory<BookDashboard> {}

DaggerClass

@Module(subcomponents = ActivityBuilder_BindBookDashboard.BookDashboardSubcomponent.class)
public abstract class ActivityBuilder_BindBookDashboard {
  private ActivityBuilder_BindBookDashboard() {}

  @Binds
  @IntoMap
  @ClassKey(BookDashboard.class)
  abstract AndroidInjector.Factory<?> bindAndroidInjectorFactory(
      BookDashboardSubcomponent.Factory builder);

  @Subcomponent(modules = BookEngineModule.class)
  public interface BookDashboardSubcomponent extends AndroidInjector<BookDashboard> {
    @Subcomponent.Factory
    interface Factory extends AndroidInjector.Factory<BookDashboard> {}
  }
}

выше класса не может разрешить BookEngineModule и BookDashboard

Чего мне не хватает?

...