поток должен быть таким
Сначала вы вызываете метод от вашего представления к докладчику.
Затем в своем докладчике вам необходимо связаться с любым вариантом использования на уровне вашего домена, и этот уровень несет ответственность за внедрение в хранилище кинжала.
Позвольте мне показать вам пример
От вашего докладчика вы вводите свой сценарий использования (интерактор), это будет обязанность связаться с хранилищем позже
class LoginPresenter @Inject constructor(private val signInInteractor: SignInInteractor) : LoginContract.Presenter {
...
override fun signInWithEmailAndPassword(email: String, password: String) {
signInInteractor.signInWithEmailAndPassword(email, password)
...
Тогда ваш интерактор должен внедрить хранилище, как это
class SignInInteractorImpl @Inject constructor(val userRepository: UserRepository): SignInInteractor{
...
override suspend fun pushUserIntoDatabase(account: GoogleSignInAccount): Unit = suspendCancellableCoroutine { continuation ->
userRepository.createUser(account.displayName!!,account.email!!,object : UserRepository.UserRepositoryCallback{
override fun onRemoteSuccess() {
//success
}
override fun onRemoteFailure(errormsg:String) {
//failure
}
})
}
В этом случае я просто использую внутри своего варианта использования вызов в хранилище для передачи данных в Firebase
И в моем PresentationModule Я просто ввожу этот репо
@Provides
@Singleton
fun provideUserRepositoryToLogin(userRepository: UserRepository): SignInInteractor {
return SignInInteractorImpl(userRepository)
}
Это концепция, которой нужно следовать