Просто любопытно, где оказалась моя система внедрения зависимостей...

Статус на моей странице в LinkedIn теперь Открыт для работы, и забавно, как эта простая вещь меняет ваше мышление и отношение, вплоть до того, что это влияет на ваши мечты.

К этому моменту несколько дней назад мне приснился сон, в котором я сижу в конференц-зале на собеседовании по техническим вопросам — да, да, я разработчик, мне снятся странные сны, ясно? Так или иначе, в этом сне интервьюер отрывается от своей записной книжки и говорит: «Мы используем систему внедрения зависимостей под названием Resolver. Вы когда-нибудь работали с ним?

Я начал улыбаться и отвечать, что я не только использовал Resolver… я его написал! А потом вдруг прозвенел будильник, и вся эта глупая фантазия растворилась в клубе дыма.

Вздох.

Разочарованный тем, что мне так и не удалось увидеть реакцию моего вымышленного интервьюера на мое потрясающее откровение, я встал, продолжил свой день и больше не думал об этом.

До сегодняшнего утра, когда я просматривал LinkedIn и наткнулся на следующее объявление в своей ленте.

На самом деле у меня нет планов переезжать в Будапешт в ближайшем будущем, но я все равно пролистал описание вакансии, просто чтобы посмотреть, что люди ищут и какие навыки востребованы. Ты знаешь. Исследовать.

А потом я нашел это.

Резольвер.

Хм. Возможно, моя мечта была не такой уж и надуманной…

Резольвер

Я написал Resolver около пяти лет назад. Мы использовали Swinject Storyboard в проекте, и мне не нравилось, как вам приходилось явно указывать тип для каждой регистрации и внедрения внедрения зависимостей.

defaultContainer.register(LoginViewModel.self) { r in
    return LoginViewModel(service: r.resolve(Authentication.self)!)
}

Я полагал, что у Swift есть интерференция типов. Почему я не мог использовать это, чтобы выяснить, что нужно, и пропустить весь шаблон? Короче говоря, я мог, и вот родился Resolver.

Там же прописка написана как…

register { LoginViewModel(service: resolve()) }

Функция регистрации выводит тип из возвращаемого типа фабрики, а функция разрешения автоматически выводит тип параметра, необходимый для поиска.

Меньше кода, который лучше раскрывает мои намерения… что может не нравиться?

Поэтому я опубликовал Resolver как проект с открытым исходным кодом на Github, добавил библиотеку в CocoaPods, и мы даже начали использовать ее в своих проектах, где я работаю. (Возможно, я был немного настойчив, но в конце концов все согласились, что это была хорошая идея… В конце концов.)

Так что, во всяком случае, я написал его, и проект вырос, и все больше и больше людей загружали его, помечали звездочкой, разветвляли и использовали, и довольно много людей внесли в него свой вклад.

С тех пор Рэй Вендерлих сделал по нему учебник, а в прошлом году, в 2021 году, он даже принес мне Премию с открытым исходным кодом от Google. (Немного странно для разработчика iOS получать награду от Google… но вот она.)

И, конечно же, я обновлял его, исправлял случайные проблемы и время от времени добавлял новые функции или поведение. (Например, обертки свойств @Injected, ставшие возможными благодаря Swift 5.1, которые, в свою очередь, стали собственной историей здесь, на Medium.)

Моя работа над Resolver также привела меня к написанию Factory, его безопасного брата во время компиляции и возможной замены, но это уже другая история.

Так кто его использует?

Обнаружение Resolver, упомянутого в приведенном выше описании работы, заставило меня немного задуматься о моем путешествии с ним, но, что более важно, это также заставило меня задаться вопросом… использует ли его команда в Будапеште, кто еще его использует?

Где еще оно оказалось?

И это приводит нас к здесь и сейчас. Если вы все еще читаете это, то есть большая вероятность, что вы или ваша команда использовали (или все еще используете) Resolver.

Если да, то для чего? Персональный проект? Коммерческое или корпоративное приложение? Мне бы очень, очень, очень хотелось бы знать, поэтому, если у вас есть некоторый опыт в этом, уделите секунду и оставьте мне быстрый комментарий.

Нет необходимости называть названия компаний или приложений, если это проблема конфиденциальности или коммерческая тайна. В этом случае просто оставьте комментарий типа «Используемый Resolver в крупном проекте мобильного банкинга, и он сработал как шарм».

Блок завершения

Итак, это все. Мое любопытство подогревалось, но я никак не мог понять, как получить ответы на свой вопрос. Но потом я подумал: «Эй, у меня сейчас есть несколько человек, которые подписаны на меня на Medium, может быть, я могу просто спросить их напрямую».

Так и у меня.

Две последние вещи.

Я был в одном путешествии с Resolver, но я также был в другом здесь, на Medium. Просто знайте, что если вы читаете это или читали некоторые другие мои работы… Я ценю это.

До скорого.

Эта статья является частью серии Swift Dependency Injection.