Add @unchecked Sendable conformance and @Sendable handler to DIContainer

This commit is contained in:
Brendan Szymanski 2026-06-14 16:18:05 -04:00
parent 2280142fe1
commit c3a971b49e

View file

@ -1,10 +1,10 @@
import Foundation import Foundation
public final class DIContainer { public final class DIContainer: @unchecked Sendable {
public static let shared = DIContainer() public static let shared = DIContainer()
public private(set) var values = InjectionValues() public private(set) var values = InjectionValues()
private var observers: [AnyKeyPath: [UUID: () -> Void]] = [:] private var observers: [AnyKeyPath: [UUID: @Sendable () -> Void]] = [:]
private let lock = NSLock() private let lock = NSLock()
private init() {} private init() {}
@ -36,7 +36,7 @@ public final class DIContainer {
@discardableResult @discardableResult
func addObserver<T>( func addObserver<T>(
for keyPath: KeyPath<InjectionValues, T?>, for keyPath: KeyPath<InjectionValues, T?>,
handler: @escaping () -> Void handler: @escaping @Sendable () -> Void
) -> UUID { ) -> UUID {
let id = UUID() let id = UUID()
lock.withLock { lock.withLock {
@ -54,7 +54,7 @@ public final class DIContainer {
} }
private func notifyObservers(for keyPath: AnyKeyPath) { private func notifyObservers(for keyPath: AnyKeyPath) {
let handlers: [() -> Void] = lock.withLock { let handlers: [@Sendable () -> Void] = lock.withLock {
Array(observers[keyPath]?.values ?? []) Array(observers[keyPath]?.values ?? [])
} }
handlers.forEach { $0() } handlers.forEach { $0() }