Как правильно реализовать передачу репозиториев/интеракторов в приложение из библиотеки

Есть некое SDK, внутри которого есть обращение в сеть.

Внутри уже есть все что нужно для обращения к бэкенду сервиса:

  1. ретрофит клиент
  2. репозитории / интеракторы которые отвечают за получение данных из сети Внутри SDK используется DI КОИН.

Как лучше реализовать передачу данных между SDK и приложением которое использует данное SDK.

т.е. я могу реализовать так:

  1. добавить в SDK objectы со статическими методами, которые дергают внутренние интеракторы/репозитории (приложение будет дергать SdkDataManager.getData(), например)
  2. в приложении просто создают необходимы репозиторий/интерактор из SDK (val rep = MySdkRep(a, b, c), не желательно, т.к. пользователь видит много лишнего в плане зависимостей репозитория, ну и неудобно наверное будет создавать retrofit клиент который нужен репозиториям SDK внутри приложения)
  3. Создать внутри SDK что-то типа Factory, которая возвращает готовые репозитории/интеракторы

SDK

object SdkRepFactory : KoinComponent {
    val oneRepository: OneRepository by inject()
    val TwoRepository: TwoRepository by inject()
}

App

val myRep = SdkRepFactory.oneRepository
  1. самый простой, если в приложении КОИН DI, то будут инжектить через коин)

  2. Другая реализация Factory внутри SDK

код

 class SdkInteractorFactory : Factory<Interactor>, KoinComponent {
    private val field: Interactor by inject()
    override fun create(): Interactor = field
}

в APP

val interactor = SdkInteractorFactory().create()

Какой вариант бы выбрать? Или может другой вариант?


Ответы (0 шт):