generamba-catalog icon indicating copy to clipboard operation
generamba-catalog copied to clipboard

Swifty_viper Interactor + Service

Open NikKovIos opened this issue 8 years ago • 7 comments

Как инджектить сервисы в Interactor? С помощью конфигуратора, с помощью глобального сервис локатора или ещё как?

Есть ли у вас пример программы на свифте с конфигуратором в открытом доступе?

NikKovIos avatar Jan 30 '17 07:01 NikKovIos

У нас этим обычно этим занимается некий DI-контейнер. https://github.com/rambler-digital-solutions/rambler-it-ios <- при помощи Typhoon

DevAlloy avatar Jan 30 '17 07:01 DevAlloy

Я там не нашёл примера для сфифта(

NikKovIos avatar Jan 30 '17 07:01 NikKovIos

Так это вопрос непосредственно контейнера, надо выбрать контейнер и их доки с примерами смотреть. Инжекция сервиса ничем не отличается от инжекции любого другого компонента. Либы: Dip, Swinject например.

DevAlloy avatar Jan 30 '17 08:01 DevAlloy

Вопрос - где их инджектить, а не каким образом. В Objective-C для этого используется assembly. В swift он убран.

NikKovIos avatar Jan 30 '17 09:01 NikKovIos

Да такие же фабрики создаются, только затачиваются на соответствующую либу. На одном проекте юзаем Dip, соответственно в фабрике модуля все затачивается под него. Ну и собственный шаблон сделали, который завязан на версию свифта + viper + dip

DevAlloy avatar Jan 30 '17 09:01 DevAlloy

Тоесть создавать отдельный assembly в модуле, только чтобы заинжектить сервис??

NikKovIos avatar Jan 30 '17 11:01 NikKovIos

Посмотрел на сам шаблон, в модуле уже есть configurator/assembly, там создается Interactor и проставляются зависимости. Для сервисного слоя нужен еще один configurator/assembly, где происходит создание нужных сервисов. Конфигуратор/фабрика модуля должны знать о конфигураторе/фабрике сервисов, чтобы проставить зависимость interactor.

В целом это будет выглядеть так:

let interactor = ModuleInteractor()
interactor.output = presenter
interactor.postService = serviceConfigurator.postService()

Соответственно конфигуратор сервисов создает сервисы, а конфигуратор модуля забирает их и проставляет в interactor.

DevAlloy avatar Jan 30 '17 11:01 DevAlloy