我对Dagger 2真的很陌生,我知道它的工作原理和作用,但是在将其实现到我的项目中时遇到了一些问题。
目前,我的目标只是将演示者注入我的视野,目的是使我的工作观念脱钩
presenter = Presenter(myInteractor())
这是我尝试过的
class MyAppApplication: Application() {
lateinit var presentationComponent: PresentationComponent
override fun onCreate() {
super.onCreate()
createPresentationComponent()
}
private fun createPresentationComponent() {
presentationComponent = DaggerPresentationComponent.builder()
.presentationModule(PresentationModule(this))
.build()
}
}
@Component(modules = arrayOf(PresentationModule::class))
@Singleton
interface PresentationComponent {
fun inject(loginActivity: LoginView)
fun loginUserPresenter(): LoginPresenter
}
@Module
class PresentationModule(application: Application) {
@Provides @Singleton fun provideLoginUserPresenter(signInInteractor: SignInInteractor): LoginPresenter {
return LoginPresenter(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,它应该可以工作,但不能工作。
在此先感谢您的帮助
答案 0 :(得分:1)
就像错误消息所言,您正在尝试将SignInInteractor
中的PresentationModule
传递给LoginPresenter
,但是您并未在任何地方提供实现。一种可能的解决方案是将以下代码块添加到您的PresentationModule
中:
@Provides @Singleton fun provideSignInInteractor(): SignInInteractor {
return TODO("Add an implementation of SignInInteractor here.")
}
当然,TODO
需要替换为您选择的SignInInteractor
(例如,myInteractor()
函数会起作用)。然后SignInInteractor
将使用LoginPresenter
。希望有帮助!