# Dependency Injection

> iOS Dependency Injection Standards

- Skill: `fierzone/dependency-injection-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add fierzone/dependency-injection-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fierzone/dependency-injection-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: fierzone (https://skillmd.com/u/fierzone)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/fierzone/dependency-injection-2

---


# iOS Dependency Injection Standards

## **Priority: P0**

## Implementation Guidelines

### Protocol-Based DI (Manual)

- **Initializer Injection**: Preferred method. Pass dependencies through `init`.
- **Abstractions**: Inject protocols instead of concrete classes to facilitate testing (Mocks/Stubs).

### Modern Property Wrappers (Factory/Resolver)

- **Factory**: Use the `Factory` library for lightweight, type-safe navigation-friendly DI.
- **Swinject**: Use for enterprise-grade container-based DI in large modular projects.
- **Injected**: Use `@Injected` property wrappers for cleaner syntax in ViewModels.

### Scoping

- **Singleton**: Use for app-wide services (Auth, Network, Database).
- **Unique/Transient**: Default for ViewModels and temporary workers.
- **Graph/Cached**: Use for shared data within a specific feature flow (Coordinator scope).

## Anti-Patterns

- **Singletitis**: `**No global Shared singleton access everywhere**: Inject the service via initializer.`
- **Service Locator**: `**No Resolver.resolve() inside logic**: Pass dependency via constructor or property wrapper.`
- **Concrete Dependency**: `**No direct class instantiation**: Depend on protocols for testability.`

## References

- [Manual & Library DI Setup](references/implementation.md)

