Repolode
hmlongco

hmlongco/Factory

Um container de injeção de dependências para Swift e SwiftUI que registra factories como propriedades computadas simples e oferece escopos, contextos e mocks para testes.

Estrelas
2,929
Forks
193
Issues abertas
1
Último commit
há 9 dias

O que é?

Factory é uma biblioteca de injeção de dependências baseada em containers para Swift e SwiftUI. Você define um serviço como uma propriedade computada em um Container que retorna uma Factory e, em seguida, solicita esse serviço com um wrapper de propriedade @Injected, uma chamada direta de função ou uma função global de dependência. O compilador verifica se existe uma factory para cada tipo injetado, então registros ausentes são identificados na compilação, e não em tempo de execução.

A biblioteca atende às necessidades comuns de sistemas de DI: escopos como singleton, cached, shared e escopos de sessão personalizados controlam por quanto tempo as instâncias vivem; os contextos permitem alternar implementações em builds de debug, testes unitários, previews do SwiftUI ou testes de UI. Substituir um registro por um mock exige apenas uma chamada, facilitando a configuração de previews e casos com XCTest ou Swift Testing.

Factory também funciona com Observation, @MainActor e o isolamento da concorrência do Swift, além de incluir um modo de debug que rastreia a árvore de resolução. A biblioteca é distribuída pelo Swift Package Manager sob a licença MIT.

Recursos principais

  • 01Registra serviços como propriedades computadas em um Container, com verificações em tempo de compilação para factories ausentes.
  • 02Oferece wrappers de propriedade, chamadas diretas de factory e funções globais de dependência para resolver dependências.
  • 03Oferece escopos como singleton, cached, shared e escopos personalizados.
  • 04Disponibiliza contextos para debug, testes unitários, previews do SwiftUI e testes de UI, permitindo alternar implementações.
  • 05Funciona com containers baseados em cenas do SwiftUI, Observation e isolamento de @MainActor.
  • 06Inclui um rastreamento de debug que imprime a árvore de resolução de dependências.

Casos de uso

  • Injetar serviços e repositórios em views e view models do SwiftUI.
  • Substituir serviços de rede ou analytics por mocks em previews do SwiftUI.
  • Escrever testes unitários que cubram estados de carregamento, vazio e erro, substituindo dependências.
  • Estruturar um app para iOS com as arquiteturas MVVM, MVP, Clean ou VIPER.

Antes de usar

  • É exclusivo para projetos Swift, portanto não se aplica a outras linguagens.

Em coleções

Tópicos

Perguntas frequentes

O que é Factory?
Um container de injeção de dependências para Swift e SwiftUI que registra factories como propriedades computadas simples e oferece escopos, contextos e mocks para testes. Factory é uma biblioteca de injeção de dependências baseada em containers para Swift e SwiftUI. Você define um serviço como uma propriedade computada em um Container que retorna uma Factory e, em seguida, solicita esse serviço com um wrapper de propriedade @Injected, uma chamada direta de função ou uma função global de dependência. O compilador verifica se existe uma factory para cada tipo injetado, então registros ausentes são identificados na compilação, e não em tempo de execução.
Factory é gratuito? Qual é a licença?
Factory é open source sob a licença MIT. Confira os termos da licença antes de usá-lo em produtos comerciais.
Factory ainda é mantido?
Manutenção ativa. O último commit de Factory foi em 28 de out. de 2026.
Para que posso usar Factory?
Injetar serviços e repositórios em views e view models do SwiftUI. Substituir serviços de rede ou analytics por mocks em previews do SwiftUI. Escrever testes unitários que cubram estados de carregamento, vazio e erro, substituindo dependências. Estruturar um app para iOS com as arquiteturas MVVM, MVP, Clean ou VIPER.
Onde consigo Factory?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/hmlongco/Factory

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados