name: ios-dependency-injection
description: Configure protocol-based DI with property wrappers and Factory/Swinject. Use when setting up dependency injection or factory patterns in iOS.
metadata:
triggers:
files:
- '**/*.swift'
keywords:
- "@Injected"
- Resolver
- Container
- Swinject
- register
- resolve
iOS Dependency Injection
Priority: P0 (CRITICAL)
Implementation Workflow
- Prefer initializer injection — Pass dependencies through
init as primary approach.
- Inject protocols — Always depend on protocols instead of concrete classes for testability.
- Choose DI library — Use
Factory for lightweight DI, Swinject for enterprise-grade container-based projects.
- Apply correct scoping — Singleton for app-wide services (Auth, Network); Unique/Transient for ViewModels; Graph/Cached for feature flows.
See protocol-based DI and Factory registration examples
Anti-Patterns
- No Global Singletons: Inject services via initializer
- No Inline Service Resolution: Pass dependencies via constructor; avoid
Resolver.resolve() in business logic
- No Concrete Class Dependencies: Depend on protocols for testability
References
Canonical response anchors
When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:
Remediation anchors
- Remediation anchors: protocol injection, Factory library, initializer injection