匕首2-提供依赖性时出错

时间:2019-05-02 20:27:31

标签: android kotlin dagger-2 dagger

我对Dagger 2真的很陌生,我知道它的工作原理和作用,但是在将其实现到我的项目中时遇到了一些问题。

目前,我的目标只是将演示者注入我的视野,目的是使我的工作观念脱钩

presenter = Presenter(myInteractor())

这是我尝试过的

MyAppApplication

class MyAppApplication: Application() {

    lateinit var presentationComponent: PresentationComponent

    override fun onCreate() {
        super.onCreate()
        createPresentationComponent()
    }

    private fun createPresentationComponent() {
        presentationComponent = DaggerPresentationComponent.builder()
            .presentationModule(PresentationModule(this))
            .build()
    }
}

PresentationComponent

@Component(modules = arrayOf(PresentationModule::class))

@Singleton
interface PresentationComponent {

    fun inject(loginActivity: LoginView)
    fun loginUserPresenter(): LoginPresenter
}

PresentationModule

@Module
class PresentationModule(application: Application) {


    @Provides @Singleton fun provideLoginUserPresenter(signInInteractor: SignInInteractor): LoginPresenter {
        return LoginPresenter(signInInteractor)
    }

}

SignInInteractor

interface SignInInteractor {

    interface SignInCallBack {
        fun onSuccess()
        fun onFailure(errormsg:String)
    }

    fun signInWithEmailAndPassword(email:String,password:String,listener:SignInCallBack)
    fun firebaseAuthWithGoogle(account: GoogleSignInAccount, listener:SignInCallBack)

}

现在,我认为这就是将交互器毫无问题地注入到演示者中,然后将演示者注入到我的视图中的全部操作,但是却给了我这个错误

error: [Dagger/MissingBinding] com.myapp.domain.interactor.logininteractor.SignInInteractor cannot be provided without an @Provides-annotated method.

我有点困惑,因为如果我只提供负责将signInInteractor绑定到Presenter的presentationModule,它应该可以工作,但不能工作。

在此先感谢您的帮助

1 个答案:

答案 0 :(得分:1)

就像错误消息所言,您正在尝试将SignInInteractor中的PresentationModule传递给LoginPresenter,但是您并未在任何地方提供实现。一种可能的解决方案是将以下代码块添加到您的PresentationModule中:

@Provides @Singleton fun provideSignInInteractor(): SignInInteractor {
  return TODO("Add an implementation of SignInInteractor here.")
}

当然,TODO需要替换为您选择的SignInInteractor(例如,myInteractor()函数会起作用)。然后SignInInteractor将使用LoginPresenter。希望有帮助!