react-native/ios/Native/Utils/DI/DependencyContainer.swift

47 lines
1.2 KiB
Swift

//
// 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<T>(_ 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<T>(_ type: T.Type, factory: @escaping (Resolver) -> T) {
let key = String(describing: type)
factories[key] = factory
}
func resolve<T>() -> T {
resolve(type: T.self)
}
func resolve<T>(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
}
}