Как правильно реализовать передачу репозиториев/интеракторов в приложение из библиотеки
Есть некое SDK, внутри которого есть обращение в сеть.
Внутри уже есть все что нужно для обращения к бэкенду сервиса:
- ретрофит клиент
- репозитории / интеракторы которые отвечают за получение данных из сети Внутри SDK используется DI КОИН.
Как лучше реализовать передачу данных между SDK и приложением которое использует данное SDK.
т.е. я могу реализовать так:
- добавить в SDK objectы со статическими методами, которые дергают внутренние интеракторы/репозитории (приложение будет дергать
SdkDataManager.getData(), например) - в приложении просто создают необходимы репозиторий/интерактор из SDK (
val rep = MySdkRep(a, b, c), не желательно, т.к. пользователь видит много лишнего в плане зависимостей репозитория, ну и неудобно наверное будет создавать retrofit клиент который нужен репозиториям SDK внутри приложения) - Создать внутри SDK что-то типа Factory, которая возвращает готовые репозитории/интеракторы
SDK
object SdkRepFactory : KoinComponent {
val oneRepository: OneRepository by inject()
val TwoRepository: TwoRepository by inject()
}
App
val myRep = SdkRepFactory.oneRepository
самый простой, если в приложении КОИН DI, то будут инжектить через коин)
Другая реализация Factory внутри SDK
код
class SdkInteractorFactory : Factory<Interactor>, KoinComponent {
private val field: Interactor by inject()
override fun create(): Interactor = field
}
в APP
val interactor = SdkInteractorFactory().create()
Какой вариант бы выбрать? Или может другой вариант?