# IOS Dependency Injection

> Standards for Protocol-based DI, Property Wrappers, and Factory/Needle. Use when configuring dependency injection or factory patterns in iOS. (triggers: **/*.swift, @Injected, Resolver, Container, Swinject, register, resolve)

- Skill: `comeonoliver/ios-dependency-injection` (Agent Skill)
- Install (CLI): `npx skillmds@latest add comeonoliver/ios-dependency-injection`
- Raw SKILL.md: https://api.skillmd.com/api/skills/comeonoliver/ios-dependency-injection/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: ComeOnOliver (https://skillmd.com/u/comeonoliver)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/comeonoliver/ios-dependency-injection

---


# 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

- **No global singleton access everywhere**: Inject service via initializer.
- **No Resolver.resolve() inside logic**: Pass dependency via constructor.
- **No direct class instantiation**: Depend on protocols for testability.

## References

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


