Kotlin @subcomponent.factory方法缺少所需模块或子组件的参数
我正在将Presenter注入BookDashboard(活动)并且BookDashboardPresenter类需要在其构造函数中使用MvpViewKotlin @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
接口
当我跑的时候
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}中添加了这段代码,但仍然不起作用