// // DependencyContainer.swift // Vitaway // // Created by Artur Gurgul on 20/06/2025. // final class DependencyContainer: Resolver { private var factories: [String: (Resolver) -> Any] = [:] private var instances: [String: Any] = [:] func register(_ type: T.Type, cache: Bool = true, factory: @escaping (Resolver) -> T) { let key = String(describing: type) factories[key] = factory if cache { instances[key] = factory(self) } } func registerSingleton(_ type: T.Type, factory: @escaping (Resolver) -> T) { let key = String(describing: type) factories[key] = factory } func resolve() -> T { resolve(type: T.self) } func resolve(type: T.Type) -> T { let key = String(describing: T.self) if let instance = instances[key] as? T { return instance } guard let factory = factories[key], let instance = factory(self) as? T else { fatalError("No registered entry for type \(key)") } return instance } static var shared: DependencyContainer { (UIApplication.shared.delegate as! AppDelegate).sharedState.container } }