Repolode
hmlongco

hmlongco/Factory

Контейнер внедрения зависимостей для Swift и SwiftUI: регистрируйте фабрики как вычисляемые свойства и задавайте области жизни, контексты и моки для тестов.

Звёзды
2,929
Форки
193
Открытые issues
1
Последний коммит
8 дней назад

Что это?

Factory — библиотека внедрения зависимостей для Swift и SwiftUI на основе контейнеров. Сервис задаётся как вычисляемое свойство Container, возвращающее Factory, а получить его можно через обёртку свойства @Injected, прямой вызов функции или глобальную функцию для работы с зависимостями. Компилятор проверяет, что для каждого внедряемого типа есть фабрика, поэтому об отсутствии регистрации вы узнаете при сборке, а не во время выполнения.

Библиотека покрывает типичные потребности DI-систем: области жизни — singleton, cached, shared и пользовательские области сессии — определяют, как долго живут экземпляры; контексты позволяют подменять реализации для debug-сборок, модульных тестов, превью SwiftUI и UI-тестов. Регистрацию можно заменить мок-объектом одним вызовом — это упрощает настройку превью и тестов на XCTest или Swift Testing.

Factory также поддерживает Observation, @MainActor и изоляцию Swift concurrency, а режим отладки выводит дерево разрешения зависимостей. Библиотека распространяется через Swift Package Manager по лицензии MIT.

Ключевые возможности

  • 01Регистрирует сервисы как вычисляемые свойства Container и проверяет наличие фабрик во время компиляции.
  • 02Позволяет получать зависимости через обёртки свойств, прямые вызовы фабрик и глобальные функции.
  • 03Поддерживает области жизни singleton, cached, shared и пользовательские области.
  • 04Предоставляет контексты для debug-сборок, модульных тестов, превью SwiftUI и UI-тестов, чтобы подменять реализации.
  • 05Поддерживает контейнеры на основе сцен SwiftUI, Observation и изоляцию @MainActor.
  • 06Включает отладочный вывод дерева разрешения зависимостей.

Сценарии использования

  • Внедрение сервисов и репозиториев в представления SwiftUI и модели представлений.
  • Подмена сетевых сервисов или аналитики моками в превью SwiftUI.
  • Написание модульных тестов состояний загрузки, пустого результата и ошибки с помощью подмены зависимостей.
  • Структурирование iOS-приложений с архитектурами MVVM, MVP, Clean или VIPER.

Что важно знать

  • Подходит только для проектов на Swift и не применяется к другим языкам.

В подборках

Темы

Частые вопросы

Что такое Factory?
Контейнер внедрения зависимостей для Swift и SwiftUI: регистрируйте фабрики как вычисляемые свойства и задавайте области жизни, контексты и моки для тестов. Factory — библиотека внедрения зависимостей для Swift и SwiftUI на основе контейнеров. Сервис задаётся как вычисляемое свойство Container, возвращающее Factory, а получить его можно через обёртку свойства @Injected, прямой вызов функции или глобальную функцию для работы с зависимостями. Компилятор проверяет, что для каждого внедряемого типа есть фабрика, поэтому об отсутствии регистрации вы узнаете при сборке, а не во время выполнения.
Factory можно использовать бесплатно? Какая у него лицензия?
Factory распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
Factory всё ещё поддерживается?
Активно поддерживается. Последний коммит в Factory — 28 окт. 2026 г..
Для чего можно использовать Factory?
Внедрение сервисов и репозиториев в представления SwiftUI и модели представлений. Подмена сетевых сервисов или аналитики моками в превью SwiftUI. Написание модульных тестов состояний загрузки, пустого результата и ошибки с помощью подмены зависимостей. Структурирование iOS-приложений с архитектурами MVVM, MVP, Clean или VIPER.
Где скачать Factory?
Исходный код и инструкции по установке — на GitHub: https://github.com/hmlongco/Factory

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

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

15 тыс.+7 за неделю1,7 тыс.SwiftMITОбновлён 23 часа назад