- ✅ Built upon the amazing Factory
- ✅ Tiny footprint (
Injector.swift
andFactory.swift
are the only source files). - ✅ Built for mocking in UnitTests, UITests and SwiftUI previews.
- ✅ Unit Tested.
- ✅ Cool logo.
Injector uses the concept of a syringe:
extension Syringe {
}
Filled with medicine:
extension Syringe {
// Same mock for all environments
static let person = Medicine<PersonType>(Person(), mock: Person_Mock())
// Unique mock for all environments
static let cat = Medicine<CatType>(
Cat(),
unitTests: Cat_Mock("Mary"),
uiTests: Cat_Mock("Sam"),
swiftUIPreview: Cat_Mock("Kerry")
)
// See Medicine initializer for all combinations
}
And at runtime injected:
let person = Syringe.person.inject()
// or
let person = Syringe.person()
// or
@Inject(Syringe.person) var person
Performing a clean will reset the instances:
Syringe.clean()
https://github.com/ptrkstr/injector