strongself / generamba-catalog

The shared catalog for Generamba templates
59 stars 32 forks source link

Swifty_viper Interactor + Service #22

Open NikKovIos opened 7 years ago

NikKovIos commented 7 years ago

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

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

DevAlloy commented 7 years ago

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

NikKovIos commented 7 years ago

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

DevAlloy commented 7 years ago

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

NikKovIos commented 7 years ago

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

DevAlloy commented 7 years ago

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

NikKovIos commented 7 years ago

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

DevAlloy commented 7 years ago

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

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

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

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