Dependency Injection Setup
Instructions
Add new services to Leavn's DIContainer:
- Create service protocol:
// Services/MyDomain/MyServiceProtocol.swift public protocol MyServiceProtocol {func doSomething() async throws -> Result} - Create implementation:
// Services/MyDomain/MyServiceLive.swift public final class MyServiceLive: MyServiceProtocol {public init() {} public func doSomething() async throws -> Result {// Implementation}} - Register in DIContainer:
// For singletons (stateful services): private lazy var _myService = MyServiceLive() var myService: MyServiceProtocol {_myService} // For factories (stateless services): var myService: MyServiceProtocol {MyServiceLive()} - Use in ViewModels:
let service = DIContainer.shared.myService
Use this skill when: Creating new service, adding dependency, setting up DI, refactoring to protocol-oriented design