Kotlin @subcomponent.factory方法缺少所需模块或子组件的参数

Kotlin @subcomponent.factory方法缺少所需模块或子组件的参数,kotlin,dependency-injection,dagger-2,android-mvp,Kotlin,Dependency Injection,Dagger 2,Android Mvp,我正在将Presenter注入BookDashboard(活动)并且BookDashboardPresenter类需要在其构造函数中使用MvpView接口 当我跑的时候 AppComponent @Component( modules = [ AndroidInjectionModule::class, ActivityBuilder::class ] ) @Singleton interface AppComponent : AndroidInj

我正在将Presenter注入BookDashboard(活动)并且BookDashboardPresenter类需要在其构造函数中使用MvpView
接口

当我跑的时候

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
    }
}
@Module
abstract class ActivityBuilder {

    @ContributesAndroidInjector(modules = {BookEngineModule.class})
    public abstract BookDashboard bindBookDashboard();
}
@Module
class BookEngineModule(val mvpView: BookDashboardContract.MvpView){

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

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

  interface Presenter{
    fun fetchedBooks()
  }
}
class BookDashboardPresenter @Inject constructor(val viewContract:BookDashboardContract.MvpView) : BookDashboardContract.Presenter{

    val bookInteractor = BookInteractor(this)

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

@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
    }
}
@Module
abstract class ActivityBuilder {

    @ContributesAndroidInjector(modules = {BookEngineModule.class})
    public abstract BookDashboard bindBookDashboard();
}
@Module
class BookEngineModule(val mvpView: BookDashboardContract.MvpView){

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

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

  interface Presenter{
    fun fetchedBooks()
  }
}
class BookDashboardPresenter @Inject constructor(val viewContract:BookDashboardContract.MvpView) : BookDashboardContract.Presenter{

    val bookInteractor = BookInteractor(this)

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

@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
    }
}
@Module
abstract class ActivityBuilder {

    @ContributesAndroidInjector(modules = {BookEngineModule.class})
    public abstract BookDashboard bindBookDashboard();
}
@Module
class BookEngineModule(val mvpView: BookDashboardContract.MvpView){

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

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

  interface Presenter{
    fun fetchedBooks()
  }
}
class BookDashboardPresenter @Inject constructor(val viewContract:BookDashboardContract.MvpView) : BookDashboardContract.Presenter{

    val bookInteractor = BookInteractor(this)

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

@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
    }
}
@Module
abstract class ActivityBuilder {

    @ContributesAndroidInjector(modules = {BookEngineModule.class})
    public abstract BookDashboard bindBookDashboard();
}
@Module
class BookEngineModule(val mvpView: BookDashboardContract.MvpView){

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

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

  interface Presenter{
    fun fetchedBooks()
  }
}
class BookDashboardPresenter @Inject constructor(val viewContract:BookDashboardContract.MvpView) : BookDashboardContract.Presenter{

    val bookInteractor = BookInteractor(this)

    override fun fetchedBooks() {
        bookInteractor.fetchDataFromServer()
        viewContract.displayBooks()
    }
}
BookDashboard->Activity

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> {}
ActivityBuilder_BindBookDashboard.java:24:错误:@Subcomponent.Factory方法缺少所需模块或子组件的参数:[quick.mania.trivia.mcq.question.di.BookEngineModule]
接口工厂扩展了Androidjector.Factory{}
匕首类

@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> {}
  }
}
@模块(子组件=ActivityBuilder\u BindBookDashboard.BookDashboardSubcomponent.class)
公共抽象类ActivityBuilder\u BindBookDashboard{
私有ActivityBuilder_BindBookDashboard(){}
@束缚
@英托马普
@ClassKey(BookDashboard.class)
摘要雄甾体注射药。工厂绑定雄甾体注射药工厂(
BookDashboard子组件(Factory builder);
@子组件(模块=BookEngineModule.class)
公共接口BookDashboard子组件扩展了AndroidJector{
@子组件工厂
接口工厂扩展了Androidjector.Factory{}
}
}
上述类无法解析BookEngineModule和BookDashboard


我缺少什么?

Dagger找不到
BookDashboardContract的提供程序。MvpView
要构造
BookDashboardPresenter
-您需要解决这个问题,请参阅BookEngineModule我看到了它,它通过了模块的构造函数。但是匕首在哪里能找到呢?Dagger不知道如何获得依赖关系我在BookEngineModule@providesMvpView(bookDashboard:bookDashboard):BookDashboardContract.MvpView{return bookDashboard}中添加了这段代码,但仍然不起作用