Сверхлегкая платформа внедрения зависимостей/локатора сервисов для Swift 5.x на iOS.
Примечание. Resolver официально признан устаревшим и заменен моей новой системой внедрения зависимостей Factory. Factory — это настоящая система внедрения зависимостей на основе контейнера, которая безопасна во время компиляции и меньше, легче и быстрее, чем Resolver. Каким бы хорошим ни был Resolver, Factory лучше.
Платформы внедрения зависимостей поддерживают шаблон проектирования «Инверсия управления». Если оставить в стороне технические определения, внедрение зависимостей в значительной степени сводится к следующему:
| Предоставление объекту того, что ему нужно для выполнения своей работы.
Вот и все. Внедрение зависимостей позволяет нам писать слабосвязанный код, который, как таковой, легче повторно использовать, имитировать и тестировать.
Дополнительные сведения см. в разделе «Нежное введение во внедрение зависимостей».
Существует шесть классических стратегий внедрения зависимостей:
Resolver поддерживает их все. По ссылкам вы найдете краткое описание, примеры, а также плюсы и минусы каждого из них.
Говоря об аннотациях, Resolver теперь поддерживает разрешение сервисов с использованием нового синтаксиса оболочки свойств в Swift 5.1.
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
Просто добавьте ключевое слово Injected, и ваши зависимости будут решены автоматически. Дополнительную информацию об этой и других стратегиях см. в документации по аннотациям.
Также существует оболочка @InjectedObject
, которая может внедрять наблюдаемые объекты в представления SwiftUI.
Resolver реализован в виде чуть более 700 строк реального кода в одном файле, но в эти 700 строк входит масса функций.
TLDR: По крайней мере, обязательно прочитайте об автоматическом выводе типов, областях и опциях.
Использование Resolver — это простой трехэтапный процесс:
Как уже упоминалось, Resolver — это сверхлегкая система внедрения зависимостей, реализованная в чуть более чем 700 строках кода и содержащаяся в одном файле.
Резольвер также предназначен для повышения производительности. SwinjectStoryboard, например, является отличной системой внедрения зависимостей, но Resolver работает примерно на 800% быстрее при разрешении цепочек зависимостей, чем Swinject.
И в отличие от некоторых других систем, Resolver написан на 100% на Swift 5, без кода Objective-C, смены методов или внутренних зависимостей от среды выполнения Objective-C.
Далее, Резольвер:
Наконец, при использовании автоматического вывода типов вы также склонны писать примерно на 40-60% меньше кода внедрения зависимостей с использованием Resolver.
Resolver поддерживает CocoaPods и диспетчер пакетов Swift.
pod " Resolver "
Сам Resolver представляет собой всего лишь один исходный файл (Resolver.swift), поэтому его также легко загрузить и добавить в свой проект.
Обратите внимание, что текущая версия Resolver (1.4) поддерживает Swift 5.3 и что минимальная версия iOS, поддерживаемая в настоящее время в этом выпуске, — iOS 11.
Прочтите руководство по установке для получения информации о поддержке более ранних версий.
Я сделал свой репозиторий Builder общедоступным. Это простое iOS-приложение в стиле «основной/детальный», которое содержит примеры...
Я также использую его, чтобы поиграться с новым кодом, который использует шаблоны построения в стиле SwiftUI для построения пользовательского интерфейса и построения сетевых запросов. Проверьте это.
Вполне возможно, что недавние обновления Resolver могут привести к критическим изменениям в вашей кодовой базе.
В Resolver 1.4 улучшена безопасность потоков и производительность. Критических изменений нет, хотя прямой доступ к областям Resolver теперь устарел. См.: Области применения.
Resolver 1.3 добавляет в Resolver пространства имен. Регистрация имен позволяет улучшить автодополнение и делает ваш код более безопасным за счет уменьшения потенциальных ошибок оценки во время выполнения. Это возможное критическое изменение. См.: Именованные экземпляры.
В Resolver 1.2 изменен способ передачи аргументов в фабрику регистрации, чтобы обеспечить лучшую поддержку передачи и обработки как одного, так и нескольких аргументов. Это кардинальное изменение. См.: Передача и обработка нескольких аргументов.
В Resolver 1.5 обновлены некоторые механизмы регистрации и кэширования, используемые в Resolver. Вероятно, это не проблема, если вы не написали что-то, что зависело от внутреннего поведения Resolver.
Если вы хотите поддержать мою работу над Factory и Resolver, рассмотрите возможность спонсорства на GitHub! Существует множество уровней для увеличения поддержки и даже для наставничества и обучения в компании.
Или ты можешь просто купить мне чашку кофе!
Resolver разработан, реализован, документирован и поддерживается Майклом Лонгом, ведущим инженером-программистом iOS и входящим в 1000 лучших авторов технологий на Medium.
Майкл также был одним из победителей конкурса Google Open Source Peer Reward в 2021 году за свою работу над Resolver.
Резолвер доступен по лицензии MIT. Дополнительную информацию смотрите в файле ЛИЦЕНЗИИ.